From f9ed0c6e4b5d0a522d620033da59659acea0cda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20J=C3=A4derberg?= Date: Tue, 30 Jan 2024 18:18:39 +0100 Subject: [PATCH] Drop some compatibility --- README.adoc | 25 +- build.gradle | 10 - .../5.10/neo4j-kernel-adapter/build.gradle | 65 -- .../compat/_510/Neo4jProxyFactoryImpl.java | 44 -- .../_510/BoltTransactionRunnerImpl.java | 97 --- .../compat/_510/Neo4jProxyFactoryImpl.java | 44 -- .../neo4j/gds/compat/_510/Neo4jProxyImpl.java | 209 ------- .../5.10/storage-engine-adapter/build.gradle | 68 --- .../_510/InMemoryStorageEngineFactory.java | 268 --------- .../_510/StorageEngineProxyFactoryImpl.java | 44 -- .../InMemoryCommandCreationContextImpl.java | 107 ---- .../compat/_510/InMemoryCountsStoreImpl.java | 112 ---- .../_510/InMemoryMetaDataProviderImpl.java | 201 ------- .../gds/compat/_510/InMemoryNodeCursor.java | 87 --- .../_510/InMemoryNodePropertyCursor.java | 45 -- .../compat/_510/InMemoryPropertyCursor.java | 71 --- .../_510/InMemoryPropertySelectionImpl.java | 55 -- .../InMemoryRelationshipPropertyCursor.java | 60 -- .../_510/InMemoryRelationshipScanCursor.java | 61 -- .../InMemoryRelationshipTraversalCursor.java | 47 -- .../_510/InMemoryStorageEngineFactory.java | 568 ------------------ .../_510/InMemoryStorageEngineImpl.java | 347 ----------- .../compat/_510/InMemoryStorageLocksImpl.java | 86 --- .../gds/compat/_510/InMemoryStoreVersion.java | 69 --- .../_510/InMemoryTransactionIdStoreImpl.java | 117 ---- .../gds/compat/_510/InMemoryVersionCheck.java | 61 -- .../_510/StorageEngineProxyFactoryImpl.java | 44 -- .../compat/_510/StorageEngineProxyImpl.java | 152 ----- .../InMemoryLogVersionRepository510.java | 71 --- ...nMemoryStorageCommandReaderFactory510.java | 43 -- .../InMemoryStorageReader510.java | 332 ---------- .../5.6/neo4j-kernel-adapter/build.gradle | 65 -- .../gds/compat/_56/Neo4jProxyFactoryImpl.java | 44 -- .../compat/_56/BoltTransactionRunnerImpl.java | 98 --- .../gds/compat/_56/Neo4jProxyFactoryImpl.java | 44 -- .../neo4j/gds/compat/_56/Neo4jProxyImpl.java | 254 -------- .../compat/_56/ScanBasedStoreScanImpl.java | 40 -- .../5.6/storage-engine-adapter/build.gradle | 69 --- .../_56/InMemoryStorageEngineFactory.java | 268 --------- .../_56/StorageEngineProxyFactoryImpl.java | 44 -- .../InMemoryCommandCreationContextImpl.java | 107 ---- .../compat/_56/InMemoryCountsStoreImpl.java | 110 ---- .../_56/InMemoryMetaDataProviderImpl.java | 201 ------- .../gds/compat/_56/InMemoryNodeCursor.java | 87 --- .../_56/InMemoryNodePropertyCursor.java | 45 -- .../compat/_56/InMemoryPropertyCursor.java | 71 --- .../_56/InMemoryPropertySelectionImpl.java | 55 -- .../InMemoryRelationshipPropertyCursor.java | 60 -- .../_56/InMemoryRelationshipScanCursor.java | 61 -- .../InMemoryRelationshipTraversalCursor.java | 47 -- .../_56/InMemoryStorageEngineFactory.java | 553 ----------------- .../compat/_56/InMemoryStorageEngineImpl.java | 294 --------- .../compat/_56/InMemoryStorageLocksImpl.java | 86 --- .../gds/compat/_56/InMemoryStoreVersion.java | 68 --- .../_56/InMemoryTransactionIdStoreImpl.java | 117 ---- .../gds/compat/_56/InMemoryVersionCheck.java | 61 -- .../_56/StorageEngineProxyFactoryImpl.java | 44 -- .../compat/_56/StorageEngineProxyImpl.java | 152 ----- .../InMemoryLogVersionRepository56.java | 71 --- ...InMemoryStorageCommandReaderFactory56.java | 43 -- .../InMemoryStorageReader56.java | 325 ---------- .../5.7/neo4j-kernel-adapter/build.gradle | 65 -- .../gds/compat/_57/Neo4jProxyFactoryImpl.java | 44 -- .../compat/_57/BoltTransactionRunnerImpl.java | 98 --- .../gds/compat/_57/Neo4jProxyFactoryImpl.java | 44 -- .../neo4j/gds/compat/_57/Neo4jProxyImpl.java | 259 -------- .../compat/_57/ScanBasedStoreScanImpl.java | 40 -- .../5.7/storage-engine-adapter/build.gradle | 69 --- .../_57/InMemoryStorageEngineFactory.java | 268 --------- .../_57/StorageEngineProxyFactoryImpl.java | 44 -- .../InMemoryCommandCreationContextImpl.java | 107 ---- .../compat/_57/InMemoryCountsStoreImpl.java | 112 ---- .../_57/InMemoryMetaDataProviderImpl.java | 201 ------- .../gds/compat/_57/InMemoryNodeCursor.java | 87 --- .../_57/InMemoryNodePropertyCursor.java | 45 -- .../compat/_57/InMemoryPropertyCursor.java | 71 --- .../_57/InMemoryPropertySelectionImpl.java | 55 -- .../InMemoryRelationshipPropertyCursor.java | 60 -- .../_57/InMemoryRelationshipScanCursor.java | 61 -- .../InMemoryRelationshipTraversalCursor.java | 47 -- .../_57/InMemoryStorageEngineFactory.java | 554 ----------------- .../compat/_57/InMemoryStorageEngineImpl.java | 294 --------- .../compat/_57/InMemoryStorageLocksImpl.java | 86 --- .../gds/compat/_57/InMemoryStoreVersion.java | 68 --- .../_57/InMemoryTransactionIdStoreImpl.java | 117 ---- .../gds/compat/_57/InMemoryVersionCheck.java | 61 -- .../_57/StorageEngineProxyFactoryImpl.java | 44 -- .../compat/_57/StorageEngineProxyImpl.java | 152 ----- .../InMemoryLogVersionRepository57.java | 71 --- ...InMemoryStorageCommandReaderFactory57.java | 43 -- .../InMemoryStorageReader57.java | 332 ---------- .../5.8/neo4j-kernel-adapter/build.gradle | 65 -- .../gds/compat/_58/Neo4jProxyFactoryImpl.java | 44 -- .../compat/_58/BoltTransactionRunnerImpl.java | 97 --- .../gds/compat/_58/Neo4jProxyFactoryImpl.java | 44 -- .../neo4j/gds/compat/_58/Neo4jProxyImpl.java | 204 ------- .../5.8/storage-engine-adapter/build.gradle | 69 --- .../_58/InMemoryStorageEngineFactory.java | 268 --------- .../_58/StorageEngineProxyFactoryImpl.java | 44 -- .../InMemoryCommandCreationContextImpl.java | 107 ---- .../compat/_58/InMemoryCountsStoreImpl.java | 112 ---- .../_58/InMemoryMetaDataProviderImpl.java | 201 ------- .../gds/compat/_58/InMemoryNodeCursor.java | 87 --- .../_58/InMemoryNodePropertyCursor.java | 45 -- .../compat/_58/InMemoryPropertyCursor.java | 71 --- .../_58/InMemoryPropertySelectionImpl.java | 55 -- .../InMemoryRelationshipPropertyCursor.java | 60 -- .../_58/InMemoryRelationshipScanCursor.java | 61 -- .../InMemoryRelationshipTraversalCursor.java | 47 -- .../_58/InMemoryStorageEngineFactory.java | 554 ----------------- .../compat/_58/InMemoryStorageEngineImpl.java | 321 ---------- .../compat/_58/InMemoryStorageLocksImpl.java | 86 --- .../gds/compat/_58/InMemoryStoreVersion.java | 68 --- .../_58/InMemoryTransactionIdStoreImpl.java | 117 ---- .../gds/compat/_58/InMemoryVersionCheck.java | 61 -- .../_58/StorageEngineProxyFactoryImpl.java | 44 -- .../compat/_58/StorageEngineProxyImpl.java | 152 ----- .../InMemoryLogVersionRepository58.java | 71 --- ...InMemoryStorageCommandReaderFactory58.java | 43 -- .../InMemoryStorageReader58.java | 332 ---------- .../5.9/neo4j-kernel-adapter/build.gradle | 65 -- .../gds/compat/_59/Neo4jProxyFactoryImpl.java | 44 -- .../compat/_59/BoltTransactionRunnerImpl.java | 97 --- .../gds/compat/_59/Neo4jProxyFactoryImpl.java | 44 -- .../neo4j/gds/compat/_59/Neo4jProxyImpl.java | 208 ------- .../5.9/storage-engine-adapter/build.gradle | 68 --- .../_59/InMemoryStorageEngineFactory.java | 268 --------- .../_59/StorageEngineProxyFactoryImpl.java | 44 -- .../InMemoryCommandCreationContextImpl.java | 107 ---- .../compat/_59/InMemoryCountsStoreImpl.java | 112 ---- .../_59/InMemoryMetaDataProviderImpl.java | 201 ------- .../gds/compat/_59/InMemoryNodeCursor.java | 87 --- .../_59/InMemoryNodePropertyCursor.java | 45 -- .../compat/_59/InMemoryPropertyCursor.java | 71 --- .../_59/InMemoryPropertySelectionImpl.java | 55 -- .../InMemoryRelationshipPropertyCursor.java | 60 -- .../_59/InMemoryRelationshipScanCursor.java | 61 -- .../InMemoryRelationshipTraversalCursor.java | 47 -- .../_59/InMemoryStorageEngineFactory.java | 554 ----------------- .../compat/_59/InMemoryStorageEngineImpl.java | 341 ----------- .../compat/_59/InMemoryStorageLocksImpl.java | 86 --- .../gds/compat/_59/InMemoryStoreVersion.java | 68 --- .../_59/InMemoryTransactionIdStoreImpl.java | 117 ---- .../gds/compat/_59/InMemoryVersionCheck.java | 61 -- .../_59/StorageEngineProxyFactoryImpl.java | 44 -- .../compat/_59/StorageEngineProxyImpl.java | 152 ----- .../InMemoryLogVersionRepository59.java | 71 --- ...InMemoryStorageCommandReaderFactory59.java | 43 -- .../InMemoryStorageReader59.java | 332 ---------- .../supported-neo4j-versions.adoc | 10 +- examples/pregel-bootstrap/build.gradle | 2 +- gradle/dependencies.gradle | 17 - .../org/neo4j/gds/compat/Neo4jVersion.java | 30 - .../neo4j/gds/compat/Neo4jVersionTest.java | 18 +- .../java/org/neo4j/gds/SysInfoProcTest.java | 55 -- settings.gradle | 30 - 156 files changed, 22 insertions(+), 18016 deletions(-) delete mode 100644 compatibility/5.10/neo4j-kernel-adapter/build.gradle delete mode 100644 compatibility/5.10/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/BoltTransactionRunnerImpl.java delete mode 100644 compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/build.gradle delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCommandCreationContextImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCountsStoreImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryMetaDataProviderImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodeCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodePropertyCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertyCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertySelectionImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipPropertyCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipScanCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipTraversalCursor.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageLocksImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStoreVersion.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryTransactionIdStoreImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryVersionCheck.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyImpl.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository510.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory510.java delete mode 100644 compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader510.java delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/build.gradle delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/BoltTransactionRunnerImpl.java delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyImpl.java delete mode 100644 compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/ScanBasedStoreScanImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/build.gradle delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCommandCreationContextImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCountsStoreImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryMetaDataProviderImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodeCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodePropertyCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertyCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertySelectionImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipPropertyCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipScanCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipTraversalCursor.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageLocksImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStoreVersion.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryTransactionIdStoreImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryVersionCheck.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyImpl.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository56.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory56.java delete mode 100644 compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader56.java delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/build.gradle delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/BoltTransactionRunnerImpl.java delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyImpl.java delete mode 100644 compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/ScanBasedStoreScanImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/build.gradle delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCommandCreationContextImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCountsStoreImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryMetaDataProviderImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodeCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodePropertyCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertyCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertySelectionImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipPropertyCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipScanCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipTraversalCursor.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageLocksImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStoreVersion.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryTransactionIdStoreImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryVersionCheck.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyImpl.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository57.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory57.java delete mode 100644 compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader57.java delete mode 100644 compatibility/5.8/neo4j-kernel-adapter/build.gradle delete mode 100644 compatibility/5.8/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/BoltTransactionRunnerImpl.java delete mode 100644 compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/build.gradle delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCommandCreationContextImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCountsStoreImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryMetaDataProviderImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodeCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodePropertyCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertyCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertySelectionImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipPropertyCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipScanCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipTraversalCursor.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageLocksImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStoreVersion.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryTransactionIdStoreImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryVersionCheck.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyImpl.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository58.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory58.java delete mode 100644 compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader58.java delete mode 100644 compatibility/5.9/neo4j-kernel-adapter/build.gradle delete mode 100644 compatibility/5.9/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/BoltTransactionRunnerImpl.java delete mode 100644 compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java delete mode 100644 compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/build.gradle delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCommandCreationContextImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCountsStoreImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryMetaDataProviderImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodeCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodePropertyCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertyCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertySelectionImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipPropertyCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipScanCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipTraversalCursor.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageLocksImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStoreVersion.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryTransactionIdStoreImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryVersionCheck.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyImpl.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository59.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory59.java delete mode 100644 compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader59.java diff --git a/README.adoc b/README.adoc index 1a90575455..d5ba79ebea 100644 --- a/README.adoc +++ b/README.adoc @@ -26,20 +26,15 @@ When installing GDS manually, please refer to the below compatibility matrix: .Compatibility matrix (italicized version is in development) |=== |GDS version | Neo4j version | Java Version -.12+<.^|_GDS 2.6.x_ (preview) +.7+<.^|_GDS 2.6.0_ .4+.^|Java 21 & Java 17 |Neo4j 5.16.0 |Neo4j 5.15.0 |Neo4j 5.14.0 |Neo4j 5.13.0 -.7+.^|Java 17 +.2+.^|Java 17 |Neo4j 5.12.0 |Neo4j 5.11.0 -|Neo4j 5.10.0 -|Neo4j 5.9.0 -|Neo4j 5.8.0 -|Neo4j 5.7.0 -|Neo4j 5.6.0 .1+.^|Java 11 |Neo4j 4.4.9 - 4.4.30 .11+<.^|GDS 2.5.x @@ -100,7 +95,7 @@ For the most basic set of features, like graph loading and the graph representat org.neo4j.gds core - 2.5.5 + 2.6.0 ---- @@ -112,21 +107,21 @@ The algorithms are located in the `algo-common`, `algo` and `alpha-algo` modules org.neo4j.gds algo-common - 2.5.5 + 2.6.0 org.neo4j.gds algo - 2.5.5 + 2.6.0 org.neo4j.gds alpha-algo - 2.5.5 + 2.6.0 ---- @@ -138,28 +133,28 @@ The procedures are located in the `proc-common`, `proc` and `alpha-proc` modules org.neo4j.gds proc-common - 2.5.5 + 2.6.0 org.neo4j.gds proc - 2.5.5 + 2.6.0 org.neo4j.gds alpha-proc - 2.5.5 + 2.6.0 org.neo4j.gds open-write-services - 2.5.5 + 2.6.0 ---- diff --git a/build.gradle b/build.gradle index f8a187d9a5..75a7bea3d8 100644 --- a/build.gradle +++ b/build.gradle @@ -23,11 +23,6 @@ ext { compatibilityModules = [ 'kernel-adapter': [ project(':neo4j-kernel-adapter-4.4'), - project(':neo4j-kernel-adapter-5.6'), - project(':neo4j-kernel-adapter-5.7'), - project(':neo4j-kernel-adapter-5.8'), - project(':neo4j-kernel-adapter-5.9'), - project(':neo4j-kernel-adapter-5.10'), project(':neo4j-kernel-adapter-5.11'), project(':neo4j-kernel-adapter-5.12'), project(':neo4j-kernel-adapter-5.13'), @@ -37,11 +32,6 @@ ext { ], 'storage-engine-adapter': [ project(':storage-engine-adapter-4.4'), - project(':storage-engine-adapter-5.6'), - project(':storage-engine-adapter-5.7'), - project(':storage-engine-adapter-5.8'), - project(':storage-engine-adapter-5.9'), - project(':storage-engine-adapter-5.10'), project(':storage-engine-adapter-5.11'), project(':storage-engine-adapter-5.12'), project(':storage-engine-adapter-5.13'), diff --git a/compatibility/5.10/neo4j-kernel-adapter/build.gradle b/compatibility/5.10/neo4j-kernel-adapter/build.gradle deleted file mode 100644 index bff3be83c0..0000000000 --- a/compatibility/5.10/neo4j-kernel-adapter/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Neo4j Kernel Adapter 5.10' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.10' - - compileOnly project(':annotations') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'annotations', version: neos.'5.10' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.10' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.10' - compileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.10' - - implementation project(':neo4j-kernel-adapter-api') - implementation project(':neo4j-kernel-adapter-5-common') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - compileOnly project(':annotations') - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - implementation project(':neo4j-kernel-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.10' - - java17CompileOnly project(':annotations') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.10' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.10' - java17CompileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.10' - - java17Implementation project(':neo4j-kernel-adapter-api') - java17Implementation project(':neo4j-kernel-adapter-5-common') - } -} diff --git a/compatibility/5.10/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java b/compatibility/5.10/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 119c57cae4..0000000000 --- a/compatibility/5.10/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public Neo4jProxyApi load() { - throw new UnsupportedOperationException("5.10 compatibility requires JDK17"); - } - - @Override - public String description() { - return "Neo4j 5.10 (placeholder)"; - } -} diff --git a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/BoltTransactionRunnerImpl.java b/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/BoltTransactionRunnerImpl.java deleted file mode 100644 index c507ade688..0000000000 --- a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/BoltTransactionRunnerImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.bolt.dbapi.BoltGraphDatabaseServiceSPI; -import org.neo4j.bolt.dbapi.BoltTransaction; -import org.neo4j.bolt.protocol.common.message.AccessMode; -import org.neo4j.bolt.protocol.common.message.request.connection.RoutingContext; -import org.neo4j.bolt.tx.statement.StatementQuerySubscriber; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.BoltQuerySubscriber; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.graphdb.QueryStatistics; -import org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo; -import org.neo4j.internal.kernel.api.security.LoginContext; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.impl.query.QueryExecutionConfiguration; -import org.neo4j.kernel.impl.query.QueryExecutionKernelException; -import org.neo4j.values.virtual.MapValue; - -import java.time.Duration; -import java.util.List; -import java.util.Map; - -public class BoltTransactionRunnerImpl extends BoltTransactionRunner { - - @Override - protected BoltQuerySubscriber boltQuerySubscriber() { - var subscriber = new StatementQuerySubscriber(); - return new BoltQuerySubscriber<>() { - @Override - public void assertSucceeded() throws KernelException { - subscriber.assertSuccess(); - } - - @Override - public QueryStatistics queryStatistics() { - return subscriber.getStatistics(); - } - - @Override - public StatementQuerySubscriber innerSubscriber() { - return subscriber; - } - }; - } - - @Override - protected void executeQuery( - BoltTransaction boltTransaction, - String query, - MapValue parameters, - StatementQuerySubscriber querySubscriber - ) throws QueryExecutionKernelException { - boltTransaction.executeQuery(query, parameters, true, querySubscriber); - } - - @Override - protected BoltTransaction beginBoltWriteTransaction( - BoltGraphDatabaseServiceSPI fabricDb, - LoginContext loginContext, - KernelTransaction.Type kernelTransactionType, - ClientConnectionInfo clientConnectionInfo, - List bookmarks, - Duration txTimeout, - Map txMetadata - ) { - return fabricDb.beginTransaction( - kernelTransactionType, - loginContext, - clientConnectionInfo, - bookmarks, - txTimeout, - AccessMode.WRITE, - txMetadata, - new RoutingContext(true, Map.of()), - QueryExecutionConfiguration.DEFAULT_CONFIG - ); - } -} diff --git a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java b/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java deleted file mode 100644 index f60c8eda56..0000000000 --- a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_10; - } - - @Override - public Neo4jProxyApi load() { - return new Neo4jProxyImpl(); - } - - @Override - public String description() { - return "Neo4j 5.10"; - } -} diff --git a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyImpl.java b/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyImpl.java deleted file mode 100644 index 8c5bee5f74..0000000000 --- a/compatibility/5.10/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_510/Neo4jProxyImpl.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.common.DependencyResolver; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.GlobalProcedureRegistry; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat._5x.CommonNeo4jProxyImpl; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.PartitionedScan; -import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.procs.FieldSignature; -import org.neo4j.internal.kernel.api.procs.ProcedureSignature; -import org.neo4j.internal.kernel.api.procs.QualifiedName; -import org.neo4j.internal.kernel.api.procs.UserFunctionSignature; -import org.neo4j.internal.kernel.api.security.AccessMode; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.context.EmptyVersionContextSupplier; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.procedure.Context; -import org.neo4j.kernel.api.procedure.GlobalProcedures; -import org.neo4j.kernel.database.DatabaseReferenceImpl; -import org.neo4j.kernel.database.DatabaseReferenceRepository; -import org.neo4j.kernel.impl.store.RecordStore; -import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.procedure.Mode; - -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Stream; - -public final class Neo4jProxyImpl extends CommonNeo4jProxyImpl { - - @Override - public long getHighId(RecordStore recordStore) { - return recordStore.getIdGenerator().getHighId(); - } - - @Override - public T lookupComponentProvider(Context ctx, Class component, boolean safe) throws ProcedureException { - var globalProcedures = GraphDatabaseApiProxy.resolveDependency( - ctx.dependencyResolver(), - GlobalProcedures.class - ); - return globalProcedures.getCurrentView().lookupComponentProvider(component, safe).apply(ctx); - } - - @Override - public BoltTransactionRunner boltTransactionRunner() { - return new BoltTransactionRunnerImpl(); - } - - @Override - public ProcedureSignature procedureSignature( - QualifiedName name, - List inputSignature, - List outputSignature, - Mode mode, - boolean admin, - String deprecated, - String description, - String warning, - boolean eager, - boolean caseInsensitive, - boolean systemProcedure, - boolean internal, - boolean allowExpiredCredentials, - boolean threadSafe - ) { - return new ProcedureSignature( - name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials, - threadSafe - ); - } - - @Override - public GlobalProcedureRegistry globalProcedureRegistry(GlobalProcedures globalProcedures) { - return new GlobalProcedureRegistry() { - @Override - public Set getAllProcedures() { - return globalProcedures.getAllProcedures(); - } - - @Override - public Stream getAllNonAggregatingFunctions() { - return globalProcedures.getAllNonAggregatingFunctions(); - } - - @Override - public Stream getAllAggregatingFunctions() { - return globalProcedures.getAllAggregatingFunctions(); - } - }; - } - - private static final DependencyResolver EMPTY_DEPENDENCY_RESOLVER = new DependencyResolver.Adapter() { - @Override - public T resolveDependency(Class type, SelectionStrategy selector) { - return null; - } - - @Override - public boolean containsDependency(Class type) { - return false; - } - }; - - @Override - public DependencyResolver emptyDependencyResolver() { - return EMPTY_DEPENDENCY_RESOLVER; - } - - @Override - public CursorContextFactory cursorContextFactory(Optional pageCacheTracer) { - return pageCacheTracer.map(cacheTracer -> new CursorContextFactory( - cacheTracer, - EmptyVersionContextSupplier.EMPTY - )).orElse(CursorContextFactory.NULL_CONTEXT_FACTORY); - } - - @Override - public CompatExecutionContext executionContext(KernelTransaction ktx) { - var stmt = ktx.acquireStatement(); - var ctx = ktx.createExecutionContext(); - return new CompatExecutionContext() { - @Override - public CursorContext cursorContext() { - return ctx.cursorContext(); - } - - @Override - public AccessMode accessMode() { - return ctx.securityContext().mode(); - } - - @Override - public boolean reservePartition(PartitionedScan scan, C cursor) { - return scan.reservePartition(cursor, ctx); - } - - @Override - public void close() { - ctx.complete(); - ctx.close(); - stmt.close(); - } - }; - } - - @Override - public String neo4jArrowServerAddressHeader() { - throw new UnsupportedOperationException("Not implemented for Neo4j versions <5.14"); - } - - @Override - public boolean isCompositeDatabase(GraphDatabaseService databaseService) { - var databaseId = GraphDatabaseApiProxy.databaseId(databaseService); - var repo = GraphDatabaseApiProxy.resolveDependency(databaseService, DatabaseReferenceRepository.class); - return repo.getCompositeDatabaseReferences().stream() - .map(DatabaseReferenceImpl.Internal::databaseId) - .anyMatch(databaseId::equals); - } - - @Override - public long estimateNodeCount(Read read, int label) { - return read.countsForNodeWithoutTxState(label); - } - - @Override - public long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type) { - return read.countsForRelationshipWithoutTxState(sourceLabel, type, targetLabel); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/build.gradle b/compatibility/5.10/storage-engine-adapter/build.gradle deleted file mode 100644 index 84253d5ea7..0000000000 --- a/compatibility/5.10/storage-engine-adapter/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Storage Engine Adapter 5.10' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.10' - - compileOnly project(':annotations') - compileOnly project(':progress-tracking') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.10' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.10' - - implementation project(':core') - implementation project(':storage-engine-adapter-api') - implementation project(':config-api') - implementation project(':string-formatting') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'neo4j-kernel-api', version: ver.'neo4j' - - implementation project(':storage-engine-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.10' - - java17CompileOnly project(':annotations') - java17CompileOnly project(':progress-tracking') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.10' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.10' - - - java17Implementation project(':core') - java17Implementation project(':storage-engine-adapter-api') - java17Implementation project(':config-api') - java17Implementation project(':string-formatting') - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java b/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java deleted file mode 100644 index ec941c14b1..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.id.IdController; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.lock.LockService; -import org.neo4j.logging.LogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogVersionRepository; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.TransactionIdStore; -import org.neo4j.storageengine.migration.RollingUpgradeCompatibility; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccess; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.token.TokenHolders; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - @Override - public String name() { - return "unsupported510"; - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - PageCacheTracer pageCacheTracer - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(String storeVersion) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(StoreId storeId) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public RollingUpgradeCompatibility rollingUpgradeCompatibility() { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fs, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - PageCacheTracer cacheTracer, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - IdController idController, - DatabaseHealth databaseHealth, - LogProvider internalLogProvider, - LogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - PageCacheTracer cacheTracer, - boolean createStoreIfNotExists, - DatabaseReadOnlyChecker readOnlyChecker, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public List listStorageFiles(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) throws - IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout, PageCache pageCache) { - return false; - } - - @Override - public TransactionIdStore readOnlyTransactionIdStore( - FileSystemAbstraction filySystem, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public LogVersionRepository readOnlyLogVersionRepository( - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer cacheTracer, - DatabaseReadOnlyChecker readOnlyChecker - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public StoreId storeId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public void setStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - StoreId storeId, - long upgradeTxChecksum, - long upgradeTxCommitTimestamp - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public void setExternalStoreUUID( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - UUID externalStoreId - ) throws IOException { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public SchemaRuleMigrationAccess schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - LogService logService, - String recordFormats, - PageCacheTracer cacheTracer, - CursorContext cursorContext, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache - ) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public CommandReaderFactory commandReaderFactory() { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public DatabaseLayout databaseLayout(Neo4jLayout neo4jLayout, String databaseName) { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 6267c704fe..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public StorageEngineProxyApi load() { - throw new UnsupportedOperationException("5.10 storage engine requires JDK17"); - } - - @Override - public String description() { - return "Storage Engine 5.10"; - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCommandCreationContextImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCommandCreationContextImpl.java deleted file mode 100644 index 7458280206..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCommandCreationContextImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.configuration.Config; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.KernelVersionProvider; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.cursor.StoreCursors; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; - -public class InMemoryCommandCreationContextImpl implements CommandCreationContext { - - private final AtomicLong schemaTokens; - private final AtomicInteger propertyTokens; - private final AtomicInteger labelTokens; - private final AtomicInteger typeTokens; - - InMemoryCommandCreationContextImpl() { - this.schemaTokens = new AtomicLong(0); - this.propertyTokens = new AtomicInteger(0); - this.labelTokens = new AtomicInteger(0); - this.typeTokens = new AtomicInteger(0); - } - - @Override - public long reserveNode() { - throw new UnsupportedOperationException("Creating nodes is not supported"); - } - - @Override - public long reserveRelationship( - long sourceNode, - long targetNode, - int relationshipType, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - throw new UnsupportedOperationException("Creating relationships is not supported"); - } - - @Override - public long reserveSchema() { - return schemaTokens.getAndIncrement(); - } - - @Override - public int reserveLabelTokenId() { - return labelTokens.getAndIncrement(); - } - - @Override - public int reservePropertyKeyTokenId() { - return propertyTokens.getAndIncrement(); - } - - @Override - public int reserveRelationshipTypeTokenId() { - return typeTokens.getAndIncrement(); - } - - @Override - public void close() { - - } - - @Override - public void initialize( - KernelVersionProvider kernelVersionProvider, - CursorContext cursorContext, - StoreCursors storeCursors, - Supplier oldestActiveTransactionSequenceNumber, - ResourceLocker locks, - Supplier lockTracer - ) { - - } - - @Override - public KernelVersion kernelVersion() { - // NOTE: Double-check if this is still correct when you copy this into a new compat layer - return KernelVersion.getLatestVersion(Config.newBuilder().build()); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCountsStoreImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCountsStoreImpl.java deleted file mode 100644 index 1d31cd83d7..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryCountsStoreImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.documented.ReporterFactory; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.counts.CountsStorage; -import org.neo4j.counts.CountsVisitor; -import org.neo4j.gds.NodeLabel; -import org.neo4j.gds.api.GraphStore; -import org.neo4j.internal.helpers.progress.ProgressMonitorFactory; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.FileFlushEvent; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenNotFoundException; - -public class InMemoryCountsStoreImpl implements CountsStorage, CountsAccessor { - - private final GraphStore graphStore; - private final TokenHolders tokenHolders; - - public InMemoryCountsStoreImpl( - GraphStore graphStore, - TokenHolders tokenHolders - ) { - - this.graphStore = graphStore; - this.tokenHolders = tokenHolders; - } - - @Override - public void start( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - - } - - @Override - public void checkpoint(FileFlushEvent fileFlushEvent, CursorContext cursorContext) { - - } - - @Override - public long nodeCount(int labelId, CursorContext cursorContext) { - if (labelId == -1) { - return graphStore.nodeCount(); - } - - String nodeLabel; - try { - nodeLabel = tokenHolders.labelTokens().getTokenById(labelId).name(); - } catch (TokenNotFoundException e) { - throw new RuntimeException(e); - } - return graphStore.nodes().nodeCount(NodeLabel.of(nodeLabel)); - } - - @Override - public long relationshipCount(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - // TODO: this is quite wrong - return graphStore.relationshipCount(); - } - - @Override - public boolean consistencyCheck( - ReporterFactory reporterFactory, - CursorContextFactory contextFactory, - int numThreads, - ProgressMonitorFactory progressMonitorFactory - ) { - return true; - } - - @Override - public CountsAccessor.Updater apply(long txId, boolean isLast, CursorContext cursorContext) { - throw new UnsupportedOperationException("Updates are not supported"); - } - - @Override - public void close() { - - } - - @Override - public void accept(CountsVisitor visitor, CursorContext cursorContext) { - tokenHolders.labelTokens().getAllTokens().forEach(labelToken -> { - visitor.visitNodeCount(labelToken.id(), nodeCount(labelToken.id(), cursorContext)); - }); - - visitor.visitRelationshipCount(-1, -1, -1, graphStore.relationshipCount()); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryMetaDataProviderImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryMetaDataProviderImpl.java deleted file mode 100644 index 884eff2c37..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryMetaDataProviderImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.internal.recordstorage.InMemoryLogVersionRepository510; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.ExternalStoreId; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionId; - -import java.io.IOException; -import java.util.Optional; -import java.util.UUID; - -public class InMemoryMetaDataProviderImpl implements MetadataProvider { - - private final ExternalStoreId externalStoreId; - private final InMemoryLogVersionRepository510 logVersionRepository; - private final InMemoryTransactionIdStoreImpl transactionIdStore; - - InMemoryMetaDataProviderImpl() { - this.logVersionRepository = new InMemoryLogVersionRepository510(); - this.externalStoreId = new ExternalStoreId(UUID.randomUUID()); - this.transactionIdStore = new InMemoryTransactionIdStoreImpl(); - } - - @Override - public ExternalStoreId getExternalStoreId() { - return this.externalStoreId; - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - return this.transactionIdStore.getLastClosedTransaction(); - } - - @Override - public void setCurrentLogVersion(long version) { - logVersionRepository.setCurrentLogVersion(version); - } - - @Override - public long incrementAndGetVersion() { - return logVersionRepository.incrementAndGetVersion(); - } - - @Override - public void setCheckpointLogVersion(long version) { - logVersionRepository.setCheckpointLogVersion(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return logVersionRepository.incrementAndGetCheckpointLogVersion(); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - transactionIdStore.transactionCommitted(transactionId, checksum, commitTimestamp, consensusIndex); - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - transactionIdStore.setLastCommittedAndClosedTransactionId( - transactionId, - checksum, - commitTimestamp, - consensusIndex, - byteOffset, - logVersion - ); - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.transactionClosed( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.resetLastClosedTransaction( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - public void regenerateMetadata(StoreId storeId, UUID externalStoreUUID, CursorContext cursorContext) { - } - - @Override - public StoreId getStoreId() { - return StoreId.UNKNOWN; - } - - @Override - public void close() throws IOException { - } - - @Override - public long getCurrentLogVersion() { - return this.logVersionRepository.getCurrentLogVersion(); - } - - @Override - public long getCheckpointLogVersion() { - return this.logVersionRepository.getCheckpointLogVersion(); - } - - @Override - public long nextCommittingTransactionId() { - return this.transactionIdStore.nextCommittingTransactionId(); - } - - @Override - public long committingTransactionId() { - return this.transactionIdStore.committingTransactionId(); - } - - @Override - public long getLastCommittedTransactionId() { - return this.transactionIdStore.getLastCommittedTransactionId(); - } - - @Override - public TransactionId getLastCommittedTransaction() { - return this.transactionIdStore.getLastCommittedTransaction(); - } - - @Override - public long getLastClosedTransactionId() { - return this.transactionIdStore.getLastClosedTransactionId(); - } - - @Override - public Optional getDatabaseIdUuid(CursorContext cursorTracer) { - throw new IllegalStateException("Not supported"); - } - - @Override - public void setDatabaseIdUuid(UUID uuid, CursorContext cursorContext) { - throw new IllegalStateException("Not supported"); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodeCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodeCursor.java deleted file mode 100644 index 70e6f958ae..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodeCursor.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.api.GraphStore; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.Degrees; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodeCursor extends AbstractInMemoryNodeCursor { - - public InMemoryNodeCursor(GraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public boolean hasLabel() { - return hasAtLeastOneLabelForCurrentNode(); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor, PropertySelection selection) { - propertyCursor.initNodeProperties(propertiesReference(), selection); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor) { - properties(propertyCursor, PropertySelection.ALL_PROPERTIES); - } - - @Override - public boolean supportsFastRelationshipsTo() { - return false; - } - - @Override - public void relationshipsTo( - StorageRelationshipTraversalCursor storageRelationshipTraversalCursor, - RelationshipSelection relationshipSelection, - long neighbourNodeReference - ) { - throw new UnsupportedOperationException(); - } - - @Override - public void degrees(RelationshipSelection selection, Degrees.Mutator mutator) { - } - - @Override - public boolean scanBatch(AllNodeScan allNodeScan, long sizeHint) { - return super.scanBatch(allNodeScan, (int) sizeHint); - } - - @Override - public long[] labels() { - return longLabels(); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodePropertyCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodePropertyCursor.java deleted file mode 100644 index 41133f5453..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryNodePropertyCursor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodePropertyCursor extends AbstractInMemoryNodePropertyCursor { - - public InMemoryNodePropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - reset(); - setId(((LongReference) reference).id); - setPropertySelection(new InMemoryPropertySelectionImpl(selection)); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertyCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertyCursor.java deleted file mode 100644 index 2478a7ca9f..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertyCursor.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.compat.AbstractInMemoryPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryPropertyCursor extends AbstractInMemoryPropertyCursor { - - public InMemoryPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(reference, selection); - } - - @Override - public void initNodeProperties(StorageNodeCursor nodeCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(nodeCursor, selection); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(relationshipCursor, selection); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(reference, selection); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertySelectionImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertySelectionImpl.java deleted file mode 100644 index d48bf99cb5..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryPropertySelectionImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.compat.InMemoryPropertySelection; -import org.neo4j.storageengine.api.PropertySelection; - -public class InMemoryPropertySelectionImpl implements InMemoryPropertySelection { - - private final PropertySelection propertySelection; - - public InMemoryPropertySelectionImpl(PropertySelection propertySelection) {this.propertySelection = propertySelection;} - - @Override - public boolean isLimited() { - return propertySelection.isLimited(); - } - - @Override - public int numberOfKeys() { - return propertySelection.numberOfKeys(); - } - - @Override - public int key(int index) { - return propertySelection.key(index); - } - - @Override - public boolean test(int key) { - return propertySelection.test(key); - } - - @Override - public boolean isKeysOnly() { - return propertySelection.isKeysOnly(); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipPropertyCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipPropertyCursor.java deleted file mode 100644 index dc4ad73301..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipPropertyCursor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.storageengine.InMemoryRelationshipCursor; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipPropertyCursor extends AbstractInMemoryRelationshipPropertyCursor { - - InMemoryRelationshipPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - - } - - @Override - public void initRelationshipProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - var relationshipId = ((LongReference) reference).id; - var relationshipCursor = new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - relationshipCursor.single(relationshipId); - relationshipCursor.next(); - relationshipCursor.properties(this, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - var inMemoryRelationshipCursor = (InMemoryRelationshipCursor) relationshipCursor; - inMemoryRelationshipCursor.properties(this, selection); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipScanCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipScanCursor.java deleted file mode 100644 index 7ab410e666..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipScanCursor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipScanCursor extends AbstractInMemoryRelationshipScanCursor { - - public InMemoryRelationshipScanCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - super(graphStore, tokenHolders); - } - - @Override - public void single(long reference, long sourceNodeReference, int type, long targetNodeReference) { - single(reference); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor storagePropertyCursor, PropertySelection propertySelection - ) { - properties(storagePropertyCursor, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public boolean scanBatch(AllRelationshipsScan allRelationshipsScan, long sizeHint) { - return super.scanBatch(allRelationshipsScan, (int) sizeHint); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipTraversalCursor.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipTraversalCursor.java deleted file mode 100644 index 19d93b86a4..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryRelationshipTraversalCursor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipTraversalCursor extends AbstractInMemoryRelationshipTraversalCursor { - - public InMemoryRelationshipTraversalCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor propertyCursor, PropertySelection selection - ) { - properties(propertyCursor, new InMemoryPropertySelectionImpl(selection)); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java deleted file mode 100644 index 58a21c7a71..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,568 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.eclipse.collections.api.factory.Sets; -import org.eclipse.collections.api.set.ImmutableSet; -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.consistency.checking.ConsistencyFlags; -import org.neo4j.consistency.report.ConsistencySummaryStatistics; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.function.ThrowingSupplier; -import org.neo4j.gds.annotation.SuppressForbidden; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineFactoryIdProvider; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.batchimport.AdditionalInitialIds; -import org.neo4j.internal.batchimport.BatchImporter; -import org.neo4j.internal.batchimport.Configuration; -import org.neo4j.internal.batchimport.IncrementalBatchImporter; -import org.neo4j.internal.batchimport.IndexImporterFactory; -import org.neo4j.internal.batchimport.Monitor; -import org.neo4j.internal.batchimport.ReadBehaviour; -import org.neo4j.internal.batchimport.input.Collector; -import org.neo4j.internal.batchimport.input.Input; -import org.neo4j.internal.batchimport.input.LenientStoreInput; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.id.ScanOnOpenReadOnlyIdGeneratorFactory; -import org.neo4j.internal.recordstorage.InMemoryStorageCommandReaderFactory510; -import org.neo4j.internal.recordstorage.StoreTokens; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.layout.recordstorage.RecordDatabaseLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.KernelVersionRepository; -import org.neo4j.kernel.api.index.IndexProvidersAccess; -import org.neo4j.kernel.impl.api.index.IndexProviderMap; -import org.neo4j.kernel.impl.locking.LockManager; -import org.neo4j.kernel.impl.store.MetaDataStore; -import org.neo4j.kernel.impl.store.NeoStores; -import org.neo4j.kernel.impl.store.StoreFactory; -import org.neo4j.kernel.impl.store.StoreType; -import org.neo4j.kernel.impl.store.cursor.CachedStoreCursors; -import org.neo4j.kernel.impl.transaction.log.LogTailLogVersionsMetadata; -import org.neo4j.kernel.impl.transaction.log.LogTailMetadata; -import org.neo4j.lock.LockService; -import org.neo4j.logging.InternalLog; -import org.neo4j.logging.InternalLogProvider; -import org.neo4j.logging.NullLogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogFilesInitializer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.SchemaRule44; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccessExtended; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.NamedToken; -import org.neo4j.token.api.TokenHolder; -import org.neo4j.token.api.TokensLoader; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UncheckedIOException; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.time.Clock; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - static final String IN_MEMORY_STORAGE_ENGINE_NAME = "in-memory-510"; - - public InMemoryStorageEngineFactory() { - StorageEngineProxyApi.requireNeo4jVersion(Neo4jVersion.V_5_10, StorageEngineFactory.class); - } - - @Override - public byte id() { - return StorageEngineFactoryIdProvider.ID; - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) { - return false; - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - Clock clock, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - DatabaseHealth databaseHealth, - InternalLogProvider internalLogProvider, - InternalLogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - LogTailMetadata logTailMetadata, - KernelVersionRepository kernelVersionRepository, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - idGeneratorFactory, - pageCache, - pageCacheTracer, - fs, - internalLogProvider, - contextFactory, - false, - logTailMetadata - ); - - factory.openNeoStores(StoreType.LABEL_TOKEN).close(); - - return new InMemoryStorageEngineImpl( - databaseLayout, - tokenHolders - ); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache, CursorContext cursorContext - ) { - var fieldAccess = MetaDataStore.getFieldAccess( - pageCache, - RecordDatabaseLayout.convert(databaseLayout).metadataStore(), - databaseLayout.getDatabaseName(), - cursorContext - ); - - try { - return fieldAccess.readDatabaseUUID(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - @Override - public SchemaRuleMigrationAccessExtended schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - MemoryTracker memoryTracker - ) { - return null; // Store copy that uses this method doesn't accept GDS in memory store formats target - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fileSystemAbstraction, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - MemoryTracker memoryTracker, - PageCacheTracer pageCacheTracer, - CursorContextFactory cursorContextFactory, - boolean b - ) { - return List.of(); - } - - @Override - public DatabaseLayout databaseLayout( - Neo4jLayout neo4jLayout, String databaseName - ) { - return RecordDatabaseLayout.of(neo4jLayout, databaseName); - } - - @Override - public DatabaseLayout formatSpecificDatabaseLayout(DatabaseLayout plainLayout) { - return databaseLayout(plainLayout.getNeo4jLayout(), plainLayout.getDatabaseName()); - } - - @SuppressForbidden(reason = "This is the compat layer and we don't really need to go through the proxy") - @Override - public BatchImporter batchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCacheTracer pageCacheTracer, - Configuration configuration, - LogService logService, - PrintStream printStream, - boolean b, - AdditionalInitialIds additionalInitialIds, - Config config, - Monitor monitor, - JobScheduler jobScheduler, - Collector collector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory cursorContextFactory - ) { - throw new UnsupportedOperationException("Batch Import into GDS is not supported"); - } - - @Override - public Input asBatchImporterInput( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - MemoryTracker memoryTracker, - ReadBehaviour readBehaviour, - boolean b, - CursorContextFactory cursorContextFactory, - LogTailMetadata logTailMetadata - ) { - NeoStores neoStores = (new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - logTailMetadata - )).openAllNeoStores(); - return new LenientStoreInput( - neoStores, - readBehaviour.decorateTokenHolders(this.loadReadOnlyTokens(neoStores, true, cursorContextFactory)), - true, - cursorContextFactory, - readBehaviour - ); - } - - @Override - public long optimalAvailableConsistencyCheckerMemory( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache - ) { - return 0; - } - - @Override - public String name() { - return IN_MEMORY_STORAGE_ENGINE_NAME; - } - - @Override - public Set supportedFormats(boolean includeFormatsUnderDevelopment) { - return Set.of(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public boolean supportedFormat(String format, boolean includeFormatsUnderDevelopment) { - return format.equals(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - DatabaseReadOnlyChecker readOnlyChecker, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata, - PageCacheTracer pageCacheTracer - ) { - return new InMemoryMetaDataProviderImpl(); - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - CursorContextFactory cursorContextFactory - ) { - return new InMemoryVersionCheck(); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - boolean b, - Function function, - CursorContextFactory cursorContextFactory - ) { - return List.of(); - } - - @Override - public List load44SchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata - ) { - return List.of(); - } - - @Override - public TokenHolders loadReadOnlyTokens( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - boolean lenient, - CursorContextFactory cursorContextFactory - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - LogTailMetadata.EMPTY_LOG_TAIL - ); - try ( NeoStores stores = factory.openNeoStores( - StoreType.PROPERTY_KEY_TOKEN, StoreType.PROPERTY_KEY_TOKEN_NAME, - StoreType.LABEL_TOKEN, StoreType.LABEL_TOKEN_NAME, - StoreType.RELATIONSHIP_TYPE_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN_NAME ) ) - { - return loadReadOnlyTokens(stores, lenient, cursorContextFactory); - } - } - - private TokenHolders loadReadOnlyTokens( - NeoStores stores, - boolean lenient, - CursorContextFactory cursorContextFactory - ) - { - try ( var cursorContext = cursorContextFactory.create("loadReadOnlyTokens"); - var storeCursors = new CachedStoreCursors( stores, cursorContext ) ) - { - stores.start( cursorContext ); - TokensLoader loader = lenient ? StoreTokens.allReadableTokens( stores ) : StoreTokens.allTokens( stores ); - TokenHolder propertyKeys = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_PROPERTY_KEY ); - TokenHolder labels = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_LABEL ); - TokenHolder relationshipTypes = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_RELATIONSHIP_TYPE ); - - propertyKeys.setInitialTokens( lenient ? unique( loader.getPropertyKeyTokens( storeCursors ) ) : loader.getPropertyKeyTokens( storeCursors ) ); - labels.setInitialTokens( lenient ? unique( loader.getLabelTokens( storeCursors ) ) : loader.getLabelTokens( storeCursors ) ); - relationshipTypes.setInitialTokens( - lenient ? unique( loader.getRelationshipTypeTokens( storeCursors ) ) : loader.getRelationshipTypeTokens( storeCursors ) ); - return new TokenHolders( propertyKeys, labels, relationshipTypes ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - - private static List unique( List tokens ) - { - if ( !tokens.isEmpty() ) - { - Set names = new HashSet<>( tokens.size() ); - int i = 0; - while ( i < tokens.size() ) - { - if ( names.add( tokens.get( i ).name() ) ) - { - i++; - } - else - { - // Remove the token at the given index, by replacing it with the last token in the list. - // This changes the order of elements, but can be done in constant time instead of linear time. - int lastIndex = tokens.size() - 1; - NamedToken endToken = tokens.remove( lastIndex ); - if ( i < lastIndex ) - { - tokens.set( i, endToken ); - } - } - } - } - return tokens; - } - - @Override - public CommandReaderFactory commandReaderFactory() { - return InMemoryStorageCommandReaderFactory510.INSTANCE; - } - - @Override - public void consistencyCheck( - FileSystemAbstraction fileSystem, - DatabaseLayout layout, - Config config, - PageCache pageCache, - IndexProviderMap indexProviders, - InternalLog log, - ConsistencySummaryStatistics summary, - int numberOfThreads, - long maxOffHeapCachingMemory, - OutputStream progressOutput, - boolean verbose, - ConsistencyFlags flags, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer, - LogTailMetadata logTailMetadata - ) { - // we can do no-op, since our "database" is _always_ consistent - } - - @Override - public ImmutableSet getStoreOpenOptions( - FileSystemAbstraction fs, - PageCache pageCache, - DatabaseLayout layout, - CursorContextFactory contextFactory - ) { - // Not sure about this, empty set is returned when the store files are in `little-endian` format - // See: `org.neo4j.kernel.impl.store.format.PageCacheOptionsSelector.select` - return Sets.immutable.empty(); - } - - @Override - public StoreId retrieveStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - return StoreId.retrieveFromStore(fs, databaseLayout, pageCache, cursorContext); - } - - - @Override - public Optional versionInformation(StoreVersionIdentifier storeVersionIdentifier) { - return Optional.of(new InMemoryStoreVersion()); - } - - @Override - public void resetMetadata( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - CursorContextFactory cursorContextFactory, - PageCacheTracer pageCacheTracer, - StoreId storeId, - UUID externalStoreId - ) { - throw new UnsupportedOperationException(); - } - - @Override - public IncrementalBatchImporter incrementalBatchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystem, - PageCacheTracer pageCacheTracer, - Configuration config, - LogService logService, - PrintStream progressOutput, - boolean verboseProgressOutput, - AdditionalInitialIds additionalInitialIds, - ThrowingSupplier logTailMetadataSupplier, - Config dbConfig, - Monitor monitor, - JobScheduler jobScheduler, - Collector badCollector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - IndexProvidersAccess indexProvidersAccess - ) { - throw new UnsupportedOperationException(); - } - - @Override - public LockManager createLockManager(Config config, SystemNanoClock clock) { - return LockManager.NO_LOCKS_LOCK_MANAGER; - } - - @Override - public List listStorageFiles( - FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout - ) { - return Collections.emptyList(); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache - ) { - return StorageFilesState.recoveredState(); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineImpl.java deleted file mode 100644 index 484f0c1a19..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageEngineImpl.java +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.configuration.Config; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.TokenManager; -import org.neo4j.gds.config.GraphProjectConfig; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.core.loading.GraphStoreCatalog; -import org.neo4j.gds.storageengine.InMemoryDatabaseCreationCatalog; -import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor; -import org.neo4j.internal.diagnostics.DiagnosticsLogger; -import org.neo4j.internal.recordstorage.InMemoryStorageReader510; -import org.neo4j.internal.schema.StorageEngineIndexingBehaviour; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.DatabaseFlushEvent; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; -import org.neo4j.kernel.lifecycle.Lifecycle; -import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.lock.LockGroup; -import org.neo4j.lock.LockService; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.logging.InternalLog; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.CommandBatchToApply; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.CommandStream; -import org.neo4j.storageengine.api.IndexUpdateListener; -import org.neo4j.storageengine.api.InternalErrorTracer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageCommand; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StoreFileMetadata; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionApplicationMode; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.storageengine.api.enrichment.Enrichment; -import org.neo4j.storageengine.api.enrichment.EnrichmentCommand; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; -import org.neo4j.storageengine.api.txstate.TxStateVisitor; -import org.neo4j.storageengine.api.txstate.validation.TransactionValidatorFactory; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static org.neo4j.gds.utils.StringFormatting.formatWithLocale; - -public final class InMemoryStorageEngineImpl implements StorageEngine { - - public static final byte ID = 42; - private final MetadataProvider metadataProvider; - private final CypherGraphStore graphStore; - private final DatabaseLayout databaseLayout; - private final InMemoryTransactionStateVisitor txStateVisitor; - - private final CommandCreationContext commandCreationContext; - - private final TokenManager tokenManager; - private final InMemoryCountsStoreImpl countsStore; - - private static final StorageEngineIndexingBehaviour INDEXING_BEHAVIOUR = new StorageEngineIndexingBehaviour() { - @Override - public boolean useNodeIdsInRelationshipTokenIndex() { - return false; - } - - @Override - public boolean requireCoordinationLocks() { - return false; - } - - @Override - public int nodesPerPage() { - return 0; - } - - @Override - public int relationshipsPerPage() { - return 0; - } - }; - - InMemoryStorageEngineImpl( - DatabaseLayout databaseLayout, - TokenHolders tokenHolders - ) { - this.databaseLayout = databaseLayout; - this.graphStore = getGraphStoreFromCatalog(databaseLayout.getDatabaseName()); - this.txStateVisitor = new InMemoryTransactionStateVisitor(graphStore, tokenHolders); - this.commandCreationContext = new InMemoryCommandCreationContextImpl(); - this.tokenManager = new TokenManager( - tokenHolders, - InMemoryStorageEngineImpl.this.txStateVisitor, - InMemoryStorageEngineImpl.this.graphStore, - commandCreationContext - ); - InMemoryStorageEngineImpl.this.graphStore.initialize(tokenHolders); - this.countsStore = new InMemoryCountsStoreImpl(graphStore, tokenHolders); - this.metadataProvider = new InMemoryMetaDataProviderImpl(); - } - - private static CypherGraphStore getGraphStoreFromCatalog(String databaseName) { - var graphName = InMemoryDatabaseCreationCatalog.getRegisteredDbCreationGraphName(databaseName); - return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores() - .filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig - .config() - .graphName() - .equals(graphName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(formatWithLocale( - "No graph with name `%s` was found in GraphStoreCatalog. Available graph names are %s", - graphName, - GraphStoreCatalog.getAllGraphStores() - .map(GraphStoreCatalog.GraphStoreWithUserNameAndConfig::config) - .map(GraphProjectConfig::graphName) - .collect(Collectors.toList()) - ))) - .graphStore(); - } - - @Override - public StoreEntityCounters storeEntityCounters() { - return new StoreEntityCounters() { - @Override - public long nodes() { - return graphStore.nodeCount(); - } - - @Override - public long relationships() { - return graphStore.relationshipCount(); - } - - @Override - public long properties() { - return graphStore.nodePropertyKeys().size() + graphStore.relationshipPropertyKeys().size(); - } - - @Override - public long relationshipTypes() { - return graphStore.relationshipTypes().size(); - } - - @Override - public long allNodesCountStore(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public long allRelationshipsCountStore(CursorContext cursorContext) { - return graphStore.relationshipCount(); - } - }; - } - - @Override - public void preAllocateStoreFilesForCommands( - CommandBatchToApply commandBatchToApply, - TransactionApplicationMode transactionApplicationMode - ) { - } - - @Override - public StoreCursors createStorageCursors(CursorContext initialContext) { - return StoreCursors.NULL; - } - - @Override - public StorageLocks createStorageLocks(ResourceLocker locker) { - return new InMemoryStorageLocksImpl(locker); - } - - @Override - public List createCommands( - ReadableTransactionState state, - StorageReader storageReader, - CommandCreationContext creationContext, - LockTracer lockTracer, - TxStateVisitor.Decorator additionalTxStateVisitor, - CursorContext cursorContext, - StoreCursors storeCursors, - MemoryTracker memoryTracker - ) throws KernelException { - state.accept(txStateVisitor); - return List.of(); - } - - @Override - public void dumpDiagnostics(InternalLog internalLog, DiagnosticsLogger diagnosticsLogger) { - } - - @Override - public List createUpgradeCommands( - KernelVersion versionToUpgradeFrom, - KernelVersion versionToUpgradeTo - ) { - return List.of(); - } - - @Override - public EnrichmentCommand createEnrichmentCommand(KernelVersion kernelVersion, Enrichment enrichment) { - throw new UnsupportedOperationException(); - } - - @Override - public StoreId retrieveStoreId() { - return metadataProvider.getStoreId(); - } - - @Override - public StorageEngineIndexingBehaviour indexingBehaviour() { - return INDEXING_BEHAVIOUR; - } - - @Override - public StorageReader newReader() { - return new InMemoryStorageReader510(graphStore, tokenManager.tokenHolders(), countsStore); - } - - @Override - public void addIndexUpdateListener(IndexUpdateListener listener) { - - } - - @Override - public void apply(CommandBatchToApply batch, TransactionApplicationMode mode) { - } - - @Override - public void init() { - } - - @Override - public void start() { - - } - - @Override - public void stop() { - shutdown(); - } - - @Override - public void shutdown() { - InMemoryDatabaseCreationCatalog.removeDatabaseEntry(databaseLayout.getDatabaseName()); - } - - @Override - public void listStorageFiles( - Collection atomic, Collection replayable - ) { - - } - - @Override - public Lifecycle schemaAndTokensLifecycle() { - return new LifecycleAdapter() { - @Override - public void init() { - - } - }; - } - - @Override - public CountsAccessor countsAccessor() { - return countsStore; - } - - @Override - public MetadataProvider metadataProvider() { - return metadataProvider; - } - - @Override - public String name() { - return "gds in-memory storage engine"; - } - - @Override - public byte id() { - return ID; - } - - @Override - public CommandCreationContext newCommandCreationContext() { - return commandCreationContext; - } - - @Override - public TransactionValidatorFactory createTransactionValidatorFactory(StorageEngineFactory storageEngineFactory, Config config, SystemNanoClock clock) { - return TransactionValidatorFactory.EMPTY_VALIDATOR_FACTORY; - } - - @Override - public void lockRecoveryCommands( - CommandStream commands, LockService lockService, LockGroup lockGroup, TransactionApplicationMode mode - ) { - - } - - @Override - public void rollback(ReadableTransactionState txState, CursorContext cursorContext) { - // rollback is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - // TODO: do we want to inspect the txState to infer if rollback was called explicitly or not? - } - - @Override - public void checkpoint(DatabaseFlushEvent flushEvent, CursorContext cursorContext) { - // checkpoint is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - } - - @Override - public InternalErrorTracer internalErrorTracer() { - return InternalErrorTracer.NO_TRACER; - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageLocksImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageLocksImpl.java deleted file mode 100644 index bbc08d7e80..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStorageLocksImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; - -public class InMemoryStorageLocksImpl implements StorageLocks { - - InMemoryStorageLocksImpl(ResourceLocker locker) {} - - @Override - public void acquireExclusiveNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveNodeLock(long... ids) {} - - @Override - public void acquireSharedNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedNodeLock(long... ids) {} - - @Override - public void acquireExclusiveRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveRelationshipLock(long... ids) {} - - @Override - public void acquireSharedRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedRelationshipLock(long... ids) {} - - @Override - public void acquireRelationshipCreationLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireRelationshipDeletionLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - long relationship, - boolean relationshipAddedInTx, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireNodeDeletionLock( - ReadableTransactionState readableTransactionState, - LockTracer lockTracer, - long node - ) {} - - @Override - public void acquireNodeLabelChangeLock(LockTracer lockTracer, long node, int labelId) {} -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStoreVersion.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStoreVersion.java deleted file mode 100644 index 7d7c8d1b12..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryStoreVersion.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.configuration.Config; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.format.Capability; -import org.neo4j.storageengine.api.format.CapabilityType; - -import java.util.Optional; - -public class InMemoryStoreVersion implements StoreVersion { - - public static final String STORE_VERSION = "gds-experimental"; - - @Override - public String getStoreVersionUserString() { - return "Unknown"; - } - - @Override - public Optional successorStoreVersion(Config config) { - return Optional.empty(); - } - - @Override - public String formatName() { - return getClass().getSimpleName(); - } - - @Override - public boolean onlyForMigration() { - return false; - } - - @Override - public boolean hasCapability(Capability capability) { - return false; - } - - @Override - public boolean hasCompatibleCapabilities( - StoreVersion otherVersion, CapabilityType type - ) { - return false; - } - - @Override - public String introductionNeo4jVersion() { - return "foo"; - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryTransactionIdStoreImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryTransactionIdStoreImpl.java deleted file mode 100644 index 2a7a57be26..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryTransactionIdStoreImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.internal.recordstorage.AbstractTransactionIdStore; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.kernel.impl.transaction.log.LogPosition; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.TransactionId; -import org.neo4j.storageengine.api.TransactionIdStore; - -public class InMemoryTransactionIdStoreImpl extends AbstractTransactionIdStore { - - @Override - protected void initLastCommittedAndClosedTransactionId( - long previouslyCommittedTxId, - int checksum, - long previouslyCommittedTxCommitTimestamp, - long previouslyCommittedTxLogByteOffset, - long previouslyCommittedTxLogVersion - ) { - this.setLastCommittedAndClosedTransactionId( - previouslyCommittedTxId, - checksum, - previouslyCommittedTxCommitTimestamp, - TransactionIdStore.UNKNOWN_CONSENSUS_INDEX, - previouslyCommittedTxLogByteOffset, - previouslyCommittedTxLogVersion - ); - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - long[] metaData = this.closedTransactionId.get(); - return new ClosedTransactionMetadata( - metaData[0], - new LogPosition(metaData[1], metaData[2]), - (int) metaData[3], - metaData[4], - metaData[5] - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - protected TransactionId transactionId(long transactionId, int checksum, long commitTimestamp) { - return new TransactionId(transactionId, checksum, commitTimestamp, TransactionIdStore.UNKNOWN_CONSENSUS_INDEX); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.offer( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.set( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryVersionCheck.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryVersionCheck.java deleted file mode 100644 index 8f32317048..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/InMemoryVersionCheck.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.impl.store.format.FormatFamily; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; - -import static org.neo4j.gds.compat._510.InMemoryStoreVersion.STORE_VERSION; - -public class InMemoryVersionCheck implements StoreVersionCheck { - - private static final StoreVersionIdentifier STORE_IDENTIFIER = new StoreVersionIdentifier( - STORE_VERSION, - FormatFamily.STANDARD.name(), - 0, - 0 - ); - - @Override - public boolean isCurrentStoreVersionFullySupported(CursorContext cursorContext) { - return true; - } - - @Override - public MigrationCheckResult getAndCheckMigrationTargetVersion(String formatFamily, CursorContext cursorContext) { - return new StoreVersionCheck.MigrationCheckResult(MigrationOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public UpgradeCheckResult getAndCheckUpgradeTargetVersion(CursorContext cursorContext) { - return new StoreVersionCheck.UpgradeCheckResult(UpgradeOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public String getIntroductionVersionFromVersion(StoreVersionIdentifier storeVersionIdentifier) { - return STORE_VERSION; - } - - public StoreVersionIdentifier findLatestVersion(String s) { - return STORE_IDENTIFIER; - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 9f5c42c0f5..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_10; - } - - @Override - public StorageEngineProxyApi load() { - return new StorageEngineProxyImpl(); - } - - @Override - public String description() { - return "Storage Engine 5.10"; - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyImpl.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyImpl.java deleted file mode 100644 index 202310245b..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_510/StorageEngineProxyImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._510; - -import org.neo4j.common.Edition; -import org.neo4j.configuration.Config; -import org.neo4j.configuration.GraphDatabaseInternalSettings; -import org.neo4j.dbms.api.DatabaseManagementService; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.compat.GdsDatabaseManagementServiceBuilder; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEntityCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenHolder; - -import static org.neo4j.configuration.GraphDatabaseSettings.db_format; - -public class StorageEngineProxyImpl implements StorageEngineProxyApi { - - @Override - public void initRelationshipTraversalCursorForRelType( - StorageRelationshipTraversalCursor cursor, - long sourceNodeId, - int relTypeToken - ) { - var relationshipSelection = RelationshipSelection.selection( - relTypeToken, - Direction.OUTGOING - ); - cursor.init(sourceNodeId, -1, relationshipSelection); - } - - @Override - public StorageEngine createInMemoryStorageEngine(DatabaseLayout databaseLayout, TokenHolders tokenHolders) { - return new InMemoryStorageEngineImpl(databaseLayout, tokenHolders); - } - - @Override - public void createInMemoryDatabase( - DatabaseManagementService dbms, - String dbName, - Config config - ) { - config.set(db_format, InMemoryStorageEngineFactory.IN_MEMORY_STORAGE_ENGINE_NAME); - dbms.createDatabase(dbName, config); - } - - @Override - public GraphDatabaseService startAndGetInMemoryDatabase(DatabaseManagementService dbms, String dbName) { - dbms.startDatabase(dbName); - return dbms.database(dbName); - } - - @Override - public GdsDatabaseManagementServiceBuilder setSkipDefaultIndexesOnCreationSetting(GdsDatabaseManagementServiceBuilder dbmsBuilder) { - return dbmsBuilder.setConfig(GraphDatabaseInternalSettings.skip_default_indexes_on_creation, true); - } - - @Override - public AbstractInMemoryNodeCursor inMemoryNodeCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryNodePropertyCursor inMemoryNodePropertyCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - return new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipTraversalCursor inMemoryRelationshipTraversalCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipScanCursor inMemoryRelationshipScanCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipPropertyCursor inMemoryRelationshipPropertyCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - @Override - public void properties( - StorageEntityCursor storageCursor, StoragePropertyCursor propertyCursor, int[] propertySelection - ) { - PropertySelection selection; - if (propertySelection.length == 0) { - selection = PropertySelection.ALL_PROPERTIES; - } else { - selection = PropertySelection.selection(propertySelection); - } - storageCursor.properties(propertyCursor, selection); - } - - @Override - public Edition dbmsEdition(GraphDatabaseService databaseService) { - return GraphDatabaseApiProxy.dbmsInfo(databaseService).edition; - } - - @Override - public TokenHolders newTokenHolders() { - return new TokenHolders( - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE) - ); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository510.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository510.java deleted file mode 100644 index 35b0e6c8db..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository510.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.storageengine.api.LogVersionRepository; - -import java.util.concurrent.atomic.AtomicLong; - -public class InMemoryLogVersionRepository510 implements LogVersionRepository { - - private final AtomicLong logVersion; - private final AtomicLong checkpointLogVersion; - - public InMemoryLogVersionRepository510() { - this(0, 0); - } - - private InMemoryLogVersionRepository510(long initialLogVersion, long initialCheckpointLogVersion) { - this.logVersion = new AtomicLong(); - this.checkpointLogVersion = new AtomicLong(); - this.logVersion.set(initialLogVersion); - this.checkpointLogVersion.set(initialCheckpointLogVersion); - } - - @Override - public void setCurrentLogVersion(long version) { - this.logVersion.set(version); - } - - @Override - public long incrementAndGetVersion() { - return this.logVersion.incrementAndGet(); - } - - @Override - public void setCheckpointLogVersion(long version) { - this.checkpointLogVersion.set(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return this.checkpointLogVersion.incrementAndGet(); - } - - @Override - public long getCurrentLogVersion() { - return this.logVersion.get(); - } - - @Override - public long getCheckpointLogVersion() { - return this.checkpointLogVersion.get(); - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory510.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory510.java deleted file mode 100644 index 710f94121e..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory510.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.kernel.KernelVersion; -import org.neo4j.storageengine.api.CommandReader; -import org.neo4j.storageengine.api.CommandReaderFactory; - -public class InMemoryStorageCommandReaderFactory510 implements CommandReaderFactory { - - public static final CommandReaderFactory INSTANCE = new InMemoryStorageCommandReaderFactory510(); - - @Override - public CommandReader get(KernelVersion kernelVersion) { - switch (kernelVersion) { - case V4_2: - return LogCommandSerializationV4_2.INSTANCE; - case V4_3_D4: - return LogCommandSerializationV4_3_D3.INSTANCE; - case V5_0: - return LogCommandSerializationV5_0.INSTANCE; - default: - throw new IllegalArgumentException("Unsupported kernel version " + kernelVersion); - } - } -} diff --git a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader510.java b/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader510.java deleted file mode 100644 index 7f5095a152..0000000000 --- a/compatibility/5.10/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader510.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.eclipse.collections.api.set.primitive.IntSet; -import org.eclipse.collections.impl.set.immutable.primitive.ImmutableIntSetFactoryImpl; -import org.neo4j.common.EntityType; -import org.neo4j.common.TokenNameLookup; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.gds.compat._510.InMemoryNodeCursor; -import org.neo4j.gds.compat._510.InMemoryPropertyCursor; -import org.neo4j.gds.compat._510.InMemoryRelationshipScanCursor; -import org.neo4j.gds.compat._510.InMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.schema.ConstraintDescriptor; -import org.neo4j.internal.schema.IndexDescriptor; -import org.neo4j.internal.schema.IndexType; -import org.neo4j.internal.schema.SchemaDescriptor; -import org.neo4j.internal.schema.constraints.IndexBackedConstraintDescriptor; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StorageRelationshipScanCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.storageengine.api.StorageSchemaReader; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -public class InMemoryStorageReader510 implements StorageReader { - - protected final CypherGraphStore graphStore; - protected final TokenHolders tokenHolders; - protected final CountsAccessor counts; - private final Map, Object> dependantState; - private boolean closed; - - public InMemoryStorageReader510( - CypherGraphStore graphStore, - TokenHolders tokenHolders, - CountsAccessor counts - ) { - this.graphStore = graphStore; - - this.tokenHolders = tokenHolders; - this.counts = counts; - this.dependantState = new ConcurrentHashMap<>(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] changedLabels, - long[] unchangedLabels, - int[] propertyKeyIds, - boolean propertyKeyListIsComplete, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public long relationshipsGetCount(CursorContext cursorTracer) { - return graphStore.relationshipCount(); - } - - @Override - public boolean nodeExists(long id, StoreCursors storeCursors) { - var originalId = graphStore.nodes().toOriginalNodeId(id); - return graphStore.nodes().containsOriginalId(originalId); - } - - @Override - public boolean relationshipExists(long id, StoreCursors storeCursors) { - return true; - } - - @Override - public StorageNodeCursor allocateNodeCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public StoragePropertyCursor allocatePropertyCursor( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - return new InMemoryPropertyCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipTraversalCursor allocateRelationshipTraversalCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipScanCursor allocateRelationshipScanCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public IndexDescriptor indexGetForSchemaAndType( - SchemaDescriptor descriptor, IndexType type - ) { - return null; - } - - @Override - public AllRelationshipsScan allRelationshipScan() { - return new AbstractInMemoryAllRelationshipScan() { - @Override - boolean scanRange(AbstractInMemoryRelationshipScanCursor cursor, long start, long stopInclusive) { - return cursor.scanRange(start, stopInclusive); - } - - @Override - public boolean scanBatch(long sizeHint, AbstractInMemoryRelationshipScanCursor cursor) { - return super.scanBatch(sizeHint, cursor); - } - }; - } - - @Override - public Iterator indexGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForRelationshipType(int relationshipType) { - return Collections.emptyIterator(); - } - - @Override - public IndexDescriptor indexGetForName(String name) { - return null; - } - - @Override - public ConstraintDescriptor constraintGetForName(String name) { - return null; - } - - @Override - public boolean indexExists(IndexDescriptor index) { - return false; - } - - @Override - public Iterator indexesGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int propertyKeyId, EntityType entityType - ) { - return valueIndexesGetRelated(tokens, new int[]{propertyKeyId}, entityType); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int[] propertyKeyIds, EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] labels, - int propertyKeyId, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] tokens, - int[] propertyKeyIds, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public boolean hasRelatedSchema(long[] labels, int propertyKey, EntityType entityType) { - return false; - } - - @Override - public boolean hasRelatedSchema(int label, EntityType entityType) { - return false; - } - - @Override - public Iterator constraintsGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public boolean constraintExists(ConstraintDescriptor descriptor) { - return false; - } - - @Override - public Iterator constraintsGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetForRelationshipType(int typeId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetAll() { - return Collections.emptyIterator(); - } - - @Override - public IntSet constraintsGetPropertyTokensForLogicalKey(int token, EntityType entityType) { - return ImmutableIntSetFactoryImpl.INSTANCE.empty(); - } - - @Override - public Long indexGetOwningUniquenessConstraintId(IndexDescriptor index) { - return null; - } - - @Override - public long countsForNode(int labelId, CursorContext cursorContext) { - return counts.nodeCount(labelId, cursorContext); - } - - @Override - public long countsForRelationship(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - return counts.relationshipCount(startLabelId, typeId, endLabelId, cursorContext); - } - - @Override - public long nodesGetCount(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public int labelCount() { - return graphStore.nodes().availableNodeLabels().size(); - } - - @Override - public int propertyKeyCount() { - int nodePropertyCount = graphStore - .schema() - .nodeSchema() - .allProperties() - .size(); - int relPropertyCount = graphStore - .schema() - .relationshipSchema() - .allProperties() - .size(); - return nodePropertyCount + relPropertyCount; - } - - @Override - public int relationshipTypeCount() { - return graphStore.schema().relationshipSchema().availableTypes().size(); - } - - @Override - public T getOrCreateSchemaDependantState(Class type, Function factory) { - return type.cast(dependantState.computeIfAbsent(type, key -> factory.apply(this))); - } - - @Override - public AllNodeScan allNodeScan() { - return new InMemoryNodeScan(); - } - - @Override - public void close() { - assert !closed; - closed = true; - } - - @Override - public StorageSchemaReader schemaSnapshot() { - return this; - } - - @Override - public TokenNameLookup tokenNameLookup() { - return tokenHolders; - } - -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/build.gradle b/compatibility/5.6/neo4j-kernel-adapter/build.gradle deleted file mode 100644 index 2c4cf89522..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Neo4j Kernel Adapter 5.6' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.6' - - compileOnly project(':annotations') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'annotations', version: neos.'5.6' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.6' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.6' - compileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.6' - - implementation project(':neo4j-kernel-adapter-api') - implementation project(':neo4j-kernel-adapter-5-common') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - compileOnly project(':annotations') - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - implementation project(':neo4j-kernel-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.6' - - java17CompileOnly project(':annotations') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.6' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.6' - java17CompileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.6' - - java17Implementation project(':neo4j-kernel-adapter-api') - java17Implementation project(':neo4j-kernel-adapter-5-common') - } -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java b/compatibility/5.6/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 5f0279f2fc..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public Neo4jProxyApi load() { - throw new UnsupportedOperationException("5.6 compatibility requires JDK17"); - } - - @Override - public String description() { - return "Neo4j 5.6 (placeholder)"; - } -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/BoltTransactionRunnerImpl.java b/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/BoltTransactionRunnerImpl.java deleted file mode 100644 index 974956d066..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/BoltTransactionRunnerImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.bolt.dbapi.BoltGraphDatabaseServiceSPI; -import org.neo4j.bolt.dbapi.BoltTransaction; -import org.neo4j.bolt.protocol.common.bookmark.Bookmark; -import org.neo4j.bolt.protocol.common.message.AccessMode; -import org.neo4j.bolt.protocol.v41.message.request.RoutingContext; -import org.neo4j.bolt.tx.statement.StatementQuerySubscriber; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.BoltQuerySubscriber; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.graphdb.QueryStatistics; -import org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo; -import org.neo4j.internal.kernel.api.security.LoginContext; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.impl.query.QueryExecutionConfiguration; -import org.neo4j.kernel.impl.query.QueryExecutionKernelException; -import org.neo4j.values.virtual.MapValue; - -import java.time.Duration; -import java.util.List; -import java.util.Map; - -public class BoltTransactionRunnerImpl extends BoltTransactionRunner { - - @Override - protected BoltQuerySubscriber boltQuerySubscriber() { - var subscriber = new StatementQuerySubscriber(); - return new BoltQuerySubscriber<>() { - @Override - public void assertSucceeded() throws KernelException { - subscriber.assertSuccess(); - } - - @Override - public QueryStatistics queryStatistics() { - return subscriber.getStatistics(); - } - - @Override - public StatementQuerySubscriber innerSubscriber() { - return subscriber; - } - }; - } - - @Override - protected void executeQuery( - BoltTransaction boltTransaction, - String query, - MapValue parameters, - StatementQuerySubscriber querySubscriber - ) throws QueryExecutionKernelException { - boltTransaction.executeQuery(query, parameters, true, querySubscriber); - } - - @Override - protected BoltTransaction beginBoltWriteTransaction( - BoltGraphDatabaseServiceSPI fabricDb, - LoginContext loginContext, - KernelTransaction.Type kernelTransactionType, - ClientConnectionInfo clientConnectionInfo, - List bookmarks, - Duration txTimeout, - Map txMetadata - ) { - return fabricDb.beginTransaction( - kernelTransactionType, - loginContext, - clientConnectionInfo, - bookmarks, - txTimeout, - AccessMode.WRITE, - txMetadata, - new RoutingContext(true, Map.of()), - QueryExecutionConfiguration.DEFAULT_CONFIG - ); - } -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java b/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java deleted file mode 100644 index f064a42e37..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_6; - } - - @Override - public Neo4jProxyApi load() { - return new Neo4jProxyImpl(); - } - - @Override - public String description() { - return "Neo4j 5.6"; - } -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyImpl.java b/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyImpl.java deleted file mode 100644 index 9ec77d92b7..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/Neo4jProxyImpl.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.common.DependencyResolver; -import org.neo4j.fabric.FabricDatabaseManager; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.GlobalProcedureRegistry; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StoreScan; -import org.neo4j.gds.compat._5x.CommonNeo4jProxyImpl; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.NodeCursor; -import org.neo4j.internal.kernel.api.NodeLabelIndexCursor; -import org.neo4j.internal.kernel.api.PartitionedScan; -import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.RelationshipScanCursor; -import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.procs.FieldSignature; -import org.neo4j.internal.kernel.api.procs.ProcedureSignature; -import org.neo4j.internal.kernel.api.procs.QualifiedName; -import org.neo4j.internal.kernel.api.procs.UserFunctionSignature; -import org.neo4j.internal.kernel.api.security.AccessMode; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.context.EmptyVersionContextSupplier; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.procedure.Context; -import org.neo4j.kernel.api.procedure.GlobalProcedures; -import org.neo4j.kernel.impl.store.RecordStore; -import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.procedure.Mode; - -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public final class Neo4jProxyImpl extends CommonNeo4jProxyImpl { - - @Override - public long getHighId(RecordStore recordStore) { - return recordStore.getHighId(); - } - - @Override - public T lookupComponentProvider(Context ctx, Class component, boolean safe) throws ProcedureException { - var globalProcedures = GraphDatabaseApiProxy.resolveDependency( - ctx.dependencyResolver(), - GlobalProcedures.class - ); - return globalProcedures.lookupComponentProvider(component, safe).apply(ctx); - } - - @Override - public List> entityCursorScan( - KernelTransaction transaction, - int[] labelIds, - int batchSize, - boolean allowPartitionedScan - ) { - if (allowPartitionedScan) { - return this.partitionedCursorScan(transaction, batchSize, labelIds); - } else { - var read = transaction.dataRead(); - return Arrays - .stream(labelIds) - .mapToObj(read::nodeLabelScan) - .map(scan -> new ScanBasedStoreScanImpl<>(scan, batchSize)) - .collect(Collectors.toList()); - } - } - - @Override - public StoreScan nodeLabelIndexScan( - KernelTransaction transaction, - int labelId, - int batchSize, - boolean allowPartitionedScan - ) { - if (allowPartitionedScan) { - return this.partitionedCursorScan(transaction, batchSize, labelId).get(0); - } else { - var read = transaction.dataRead(); - var scan = read.nodeLabelScan(labelId); - return new ScanBasedStoreScanImpl<>(scan, batchSize); - } - } - - @Override - public StoreScan nodesScan(KernelTransaction ktx, long nodeCount, int batchSize) { - return new ScanBasedStoreScanImpl<>(ktx.dataRead().allNodesScan(), batchSize); - } - - @Override - public StoreScan relationshipsScan( - KernelTransaction ktx, - long relationshipCount, - int batchSize - ) { - return new ScanBasedStoreScanImpl<>(ktx.dataRead().allRelationshipsScan(), batchSize); - } - - @Override - public BoltTransactionRunner boltTransactionRunner() { - return new BoltTransactionRunnerImpl(); - } - - @Override - public ProcedureSignature procedureSignature( - QualifiedName name, - List inputSignature, - List outputSignature, - Mode mode, - boolean admin, - String deprecated, - String description, - String warning, - boolean eager, - boolean caseInsensitive, - boolean systemProcedure, - boolean internal, - boolean allowExpiredCredentials, - boolean threadSafe - ) { - return new ProcedureSignature( - name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials - ); - } - - @Override - public GlobalProcedureRegistry globalProcedureRegistry(GlobalProcedures globalProcedures) { - return new GlobalProcedureRegistry() { - @Override - public Set getAllProcedures() { - return globalProcedures.getAllProcedures(); - } - - @Override - public Stream getAllNonAggregatingFunctions() { - return globalProcedures.getAllNonAggregatingFunctions(); - } - - @Override - public Stream getAllAggregatingFunctions() { - return globalProcedures.getAllAggregatingFunctions(); - } - }; - } - - private static final DependencyResolver EMPTY_DEPENDENCY_RESOLVER = new DependencyResolver.Adapter() { - @Override - public T resolveDependency(Class type, SelectionStrategy selector) { - return null; - } - - @Override - public boolean containsDependency(Class type) { - return false; - } - }; - - @Override - public DependencyResolver emptyDependencyResolver() { - return EMPTY_DEPENDENCY_RESOLVER; - } - - @Override - public CursorContextFactory cursorContextFactory(Optional pageCacheTracer) { - return pageCacheTracer.map(cacheTracer -> new CursorContextFactory( - cacheTracer, - EmptyVersionContextSupplier.EMPTY - )).orElse(CursorContextFactory.NULL_CONTEXT_FACTORY); - } - - @Override - public CompatExecutionContext executionContext(KernelTransaction ktx) { - return new CompatExecutionContext() { - @Override - public CursorContext cursorContext() { - return ktx.cursorContext(); - } - - @Override - public AccessMode accessMode() { - return ktx.securityContext().mode(); - } - - @Override - public boolean reservePartition(PartitionedScan scan, C cursor) { - return scan.reservePartition(cursor, cursorContext(), accessMode()); - } - - @Override - public void close() { - } - }; - } - - @Override - public String neo4jArrowServerAddressHeader() { - throw new UnsupportedOperationException("Not implemented for Neo4j versions <5.14"); - } - - @Override - public boolean isCompositeDatabase(GraphDatabaseService databaseService) { - var databaseManager = GraphDatabaseApiProxy.resolveDependency(databaseService, FabricDatabaseManager.class); - return databaseManager.isFabricDatabase(GraphDatabaseApiProxy.databaseId(databaseService)); - } - - @Override - public long estimateNodeCount(Read read, int label) { - return read.countsForNodeWithoutTxState(label); - } - - @Override - public long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type) { - return read.countsForRelationshipWithoutTxState(sourceLabel, type, targetLabel); - } -} diff --git a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/ScanBasedStoreScanImpl.java b/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/ScanBasedStoreScanImpl.java deleted file mode 100644 index ac88c78e3b..0000000000 --- a/compatibility/5.6/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_56/ScanBasedStoreScanImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.StoreScan; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.Scan; - -public final class ScanBasedStoreScanImpl implements StoreScan { - private final Scan scan; - private final int batchSize; - - public ScanBasedStoreScanImpl(Scan scan, int batchSize) { - this.scan = scan; - this.batchSize = batchSize; - } - - @Override - public boolean reserveBatch(C cursor, CompatExecutionContext ctx) { - return scan.reserveBatch(cursor, batchSize, ctx.cursorContext(), ctx.accessMode()); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/build.gradle b/compatibility/5.6/storage-engine-adapter/build.gradle deleted file mode 100644 index 30e25cd4da..0000000000 --- a/compatibility/5.6/storage-engine-adapter/build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Storage Engine Adapter 5.6' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.6' - - compileOnly project(':annotations') - compileOnly project(':progress-tracking') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.6' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.6' - - implementation project(':core') - implementation project(':storage-engine-adapter-api') - implementation project(':config-api') - implementation project(':string-formatting') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'neo4j-kernel-api', version: ver.'neo4j' - - implementation project(':neo4j-adapter') - implementation project(':storage-engine-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.6' - - java17CompileOnly project(':annotations') - java17CompileOnly project(':progress-tracking') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.6' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.6' - - - java17Implementation project(':core') - java17Implementation project(':storage-engine-adapter-api') - java17Implementation project(':config-api') - java17Implementation project(':string-formatting') - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java b/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java deleted file mode 100644 index 7ccbf2b971..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.id.IdController; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.lock.LockService; -import org.neo4j.logging.LogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogVersionRepository; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.TransactionIdStore; -import org.neo4j.storageengine.migration.RollingUpgradeCompatibility; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccess; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.token.TokenHolders; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - @Override - public String name() { - return "unsupported56"; - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - PageCacheTracer pageCacheTracer - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(String storeVersion) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(StoreId storeId) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public RollingUpgradeCompatibility rollingUpgradeCompatibility() { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fs, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - PageCacheTracer cacheTracer, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - IdController idController, - DatabaseHealth databaseHealth, - LogProvider internalLogProvider, - LogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - PageCacheTracer cacheTracer, - boolean createStoreIfNotExists, - DatabaseReadOnlyChecker readOnlyChecker, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public List listStorageFiles(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) throws - IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout, PageCache pageCache) { - return false; - } - - @Override - public TransactionIdStore readOnlyTransactionIdStore( - FileSystemAbstraction filySystem, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public LogVersionRepository readOnlyLogVersionRepository( - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer cacheTracer, - DatabaseReadOnlyChecker readOnlyChecker - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public StoreId storeId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public void setStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - StoreId storeId, - long upgradeTxChecksum, - long upgradeTxCommitTimestamp - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public void setExternalStoreUUID( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - UUID externalStoreId - ) throws IOException { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public SchemaRuleMigrationAccess schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - LogService logService, - String recordFormats, - PageCacheTracer cacheTracer, - CursorContext cursorContext, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache - ) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public CommandReaderFactory commandReaderFactory() { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } - - @Override - public DatabaseLayout databaseLayout(Neo4jLayout neo4jLayout, String databaseName) { - throw new UnsupportedOperationException("rc storage engine requires JDK17"); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 5e6ab3d3d0..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public StorageEngineProxyApi load() { - throw new UnsupportedOperationException("5.6 storage engine requires JDK17"); - } - - @Override - public String description() { - return "Storage Engine 5.6"; - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCommandCreationContextImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCommandCreationContextImpl.java deleted file mode 100644 index 2527d95468..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCommandCreationContextImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.configuration.Config; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.KernelVersionProvider; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.cursor.StoreCursors; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; - -public class InMemoryCommandCreationContextImpl implements CommandCreationContext { - - private final AtomicLong schemaTokens; - private final AtomicInteger propertyTokens; - private final AtomicInteger labelTokens; - private final AtomicInteger typeTokens; - - InMemoryCommandCreationContextImpl() { - this.schemaTokens = new AtomicLong(0); - this.propertyTokens = new AtomicInteger(0); - this.labelTokens = new AtomicInteger(0); - this.typeTokens = new AtomicInteger(0); - } - - @Override - public long reserveNode() { - throw new UnsupportedOperationException("Creating nodes is not supported"); - } - - @Override - public long reserveRelationship( - long sourceNode, - long targetNode, - int relationshipType, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - throw new UnsupportedOperationException("Creating relationships is not supported"); - } - - @Override - public long reserveSchema() { - return schemaTokens.getAndIncrement(); - } - - @Override - public int reserveLabelTokenId() { - return labelTokens.getAndIncrement(); - } - - @Override - public int reservePropertyKeyTokenId() { - return propertyTokens.getAndIncrement(); - } - - @Override - public int reserveRelationshipTypeTokenId() { - return typeTokens.getAndIncrement(); - } - - @Override - public void close() { - - } - - @Override - public void initialize( - KernelVersionProvider kernelVersionProvider, - CursorContext cursorContext, - StoreCursors storeCursors, - Supplier oldestActiveTransactionSequenceNumber, - ResourceLocker locks, - Supplier lockTracer - ) { - - } - - @Override - public KernelVersion kernelVersion() { - // NOTE: Double-check if this is still correct when you copy this into a new compat layer - return KernelVersion.getLatestVersion(Config.newBuilder().build()); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCountsStoreImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCountsStoreImpl.java deleted file mode 100644 index 224369a1f1..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryCountsStoreImpl.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.documented.ReporterFactory; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.counts.CountsStorage; -import org.neo4j.counts.CountsVisitor; -import org.neo4j.gds.NodeLabel; -import org.neo4j.gds.api.GraphStore; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.FileFlushEvent; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenNotFoundException; - -public class InMemoryCountsStoreImpl implements CountsStorage, CountsAccessor { - - private final GraphStore graphStore; - private final TokenHolders tokenHolders; - - public InMemoryCountsStoreImpl( - GraphStore graphStore, - TokenHolders tokenHolders - ) { - - this.graphStore = graphStore; - this.tokenHolders = tokenHolders; - } - - @Override - public void start( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - - } - - @Override - public void checkpoint(FileFlushEvent fileFlushEvent, CursorContext cursorContext) { - - } - - @Override - public long nodeCount(int labelId, CursorContext cursorContext) { - if (labelId == -1) { - return graphStore.nodeCount(); - } - - String nodeLabel; - try { - nodeLabel = tokenHolders.labelTokens().getTokenById(labelId).name(); - } catch (TokenNotFoundException e) { - throw new RuntimeException(e); - } - return graphStore.nodes().nodeCount(NodeLabel.of(nodeLabel)); - } - - @Override - public long relationshipCount(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - // TODO: this is quite wrong - return graphStore.relationshipCount(); - } - - @Override - public boolean consistencyCheck( - ReporterFactory reporterFactory, - CursorContextFactory contextFactory, - int numThreads - ) { - return true; - } - - @Override - public CountsAccessor.Updater apply(long txId, boolean isLast, CursorContext cursorContext) { - throw new UnsupportedOperationException("Updates are not supported"); - } - - @Override - public void close() { - - } - - @Override - public void accept(CountsVisitor visitor, CursorContext cursorContext) { - tokenHolders.labelTokens().getAllTokens().forEach(labelToken -> { - visitor.visitNodeCount(labelToken.id(), nodeCount(labelToken.id(), cursorContext)); - }); - - visitor.visitRelationshipCount(-1, -1, -1, graphStore.relationshipCount()); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryMetaDataProviderImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryMetaDataProviderImpl.java deleted file mode 100644 index 7460d90a9c..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryMetaDataProviderImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.internal.recordstorage.InMemoryLogVersionRepository56; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.ExternalStoreId; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionId; - -import java.io.IOException; -import java.util.Optional; -import java.util.UUID; - -public class InMemoryMetaDataProviderImpl implements MetadataProvider { - - private final ExternalStoreId externalStoreId; - private final InMemoryLogVersionRepository56 logVersionRepository; - private final InMemoryTransactionIdStoreImpl transactionIdStore; - - InMemoryMetaDataProviderImpl() { - this.logVersionRepository = new InMemoryLogVersionRepository56(); - this.externalStoreId = new ExternalStoreId(UUID.randomUUID()); - this.transactionIdStore = new InMemoryTransactionIdStoreImpl(); - } - - @Override - public ExternalStoreId getExternalStoreId() { - return this.externalStoreId; - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - return this.transactionIdStore.getLastClosedTransaction(); - } - - @Override - public void setCurrentLogVersion(long version) { - logVersionRepository.setCurrentLogVersion(version); - } - - @Override - public long incrementAndGetVersion() { - return logVersionRepository.incrementAndGetVersion(); - } - - @Override - public void setCheckpointLogVersion(long version) { - logVersionRepository.setCheckpointLogVersion(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return logVersionRepository.incrementAndGetCheckpointLogVersion(); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - transactionIdStore.transactionCommitted(transactionId, checksum, commitTimestamp, consensusIndex); - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - transactionIdStore.setLastCommittedAndClosedTransactionId( - transactionId, - checksum, - commitTimestamp, - consensusIndex, - byteOffset, - logVersion - ); - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.transactionClosed( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.resetLastClosedTransaction( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - public void regenerateMetadata(StoreId storeId, UUID externalStoreUUID, CursorContext cursorContext) { - } - - @Override - public StoreId getStoreId() { - return StoreId.UNKNOWN; - } - - @Override - public void close() throws IOException { - } - - @Override - public long getCurrentLogVersion() { - return this.logVersionRepository.getCurrentLogVersion(); - } - - @Override - public long getCheckpointLogVersion() { - return this.logVersionRepository.getCheckpointLogVersion(); - } - - @Override - public long nextCommittingTransactionId() { - return this.transactionIdStore.nextCommittingTransactionId(); - } - - @Override - public long committingTransactionId() { - return this.transactionIdStore.committingTransactionId(); - } - - @Override - public long getLastCommittedTransactionId() { - return this.transactionIdStore.getLastCommittedTransactionId(); - } - - @Override - public TransactionId getLastCommittedTransaction() { - return this.transactionIdStore.getLastCommittedTransaction(); - } - - @Override - public long getLastClosedTransactionId() { - return this.transactionIdStore.getLastClosedTransactionId(); - } - - @Override - public Optional getDatabaseIdUuid(CursorContext cursorTracer) { - throw new IllegalStateException("Not supported"); - } - - @Override - public void setDatabaseIdUuid(UUID uuid, CursorContext cursorContext) { - throw new IllegalStateException("Not supported"); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodeCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodeCursor.java deleted file mode 100644 index 92eda2a354..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodeCursor.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.api.GraphStore; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.Degrees; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodeCursor extends AbstractInMemoryNodeCursor { - - public InMemoryNodeCursor(GraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public boolean hasLabel() { - return hasAtLeastOneLabelForCurrentNode(); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor, PropertySelection selection) { - propertyCursor.initNodeProperties(propertiesReference(), selection); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor) { - properties(propertyCursor, PropertySelection.ALL_PROPERTIES); - } - - @Override - public boolean supportsFastRelationshipsTo() { - return false; - } - - @Override - public void relationshipsTo( - StorageRelationshipTraversalCursor storageRelationshipTraversalCursor, - RelationshipSelection relationshipSelection, - long neighbourNodeReference - ) { - throw new UnsupportedOperationException(); - } - - @Override - public void degrees(RelationshipSelection selection, Degrees.Mutator mutator) { - } - - @Override - public boolean scanBatch(AllNodeScan allNodeScan, long sizeHint) { - return super.scanBatch(allNodeScan, (int) sizeHint); - } - - @Override - public long[] labels() { - return longLabels(); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodePropertyCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodePropertyCursor.java deleted file mode 100644 index b183e95d4e..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryNodePropertyCursor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodePropertyCursor extends AbstractInMemoryNodePropertyCursor { - - public InMemoryNodePropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - reset(); - setId(((LongReference) reference).id); - setPropertySelection(new InMemoryPropertySelectionImpl(selection)); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertyCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertyCursor.java deleted file mode 100644 index f4d8b3034d..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertyCursor.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.AbstractInMemoryPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryPropertyCursor extends AbstractInMemoryPropertyCursor { - - public InMemoryPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(reference, selection); - } - - @Override - public void initNodeProperties(StorageNodeCursor nodeCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(nodeCursor, selection); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(relationshipCursor, selection); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(reference, selection); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertySelectionImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertySelectionImpl.java deleted file mode 100644 index d0c4d11bae..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryPropertySelectionImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.InMemoryPropertySelection; -import org.neo4j.storageengine.api.PropertySelection; - -public class InMemoryPropertySelectionImpl implements InMemoryPropertySelection { - - private final PropertySelection propertySelection; - - public InMemoryPropertySelectionImpl(PropertySelection propertySelection) {this.propertySelection = propertySelection;} - - @Override - public boolean isLimited() { - return propertySelection.isLimited(); - } - - @Override - public int numberOfKeys() { - return propertySelection.numberOfKeys(); - } - - @Override - public int key(int index) { - return propertySelection.key(index); - } - - @Override - public boolean test(int key) { - return propertySelection.test(key); - } - - @Override - public boolean isKeysOnly() { - return propertySelection.isKeysOnly(); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipPropertyCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipPropertyCursor.java deleted file mode 100644 index 4b0895b48c..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipPropertyCursor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.storageengine.InMemoryRelationshipCursor; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipPropertyCursor extends AbstractInMemoryRelationshipPropertyCursor { - - InMemoryRelationshipPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - - } - - @Override - public void initRelationshipProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - var relationshipId = ((LongReference) reference).id; - var relationshipCursor = new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - relationshipCursor.single(relationshipId); - relationshipCursor.next(); - relationshipCursor.properties(this, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - var inMemoryRelationshipCursor = (InMemoryRelationshipCursor) relationshipCursor; - inMemoryRelationshipCursor.properties(this, selection); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipScanCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipScanCursor.java deleted file mode 100644 index 9efc1b9563..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipScanCursor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipScanCursor extends AbstractInMemoryRelationshipScanCursor { - - public InMemoryRelationshipScanCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - super(graphStore, tokenHolders); - } - - @Override - public void single(long reference, long sourceNodeReference, int type, long targetNodeReference) { - single(reference); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor storagePropertyCursor, PropertySelection propertySelection - ) { - properties(storagePropertyCursor, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public boolean scanBatch(AllRelationshipsScan allRelationshipsScan, long sizeHint) { - return super.scanBatch(allRelationshipsScan, (int) sizeHint); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipTraversalCursor.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipTraversalCursor.java deleted file mode 100644 index 2b2ad14d00..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryRelationshipTraversalCursor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipTraversalCursor extends AbstractInMemoryRelationshipTraversalCursor { - - public InMemoryRelationshipTraversalCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor propertyCursor, PropertySelection selection - ) { - properties(propertyCursor, new InMemoryPropertySelectionImpl(selection)); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java deleted file mode 100644 index eb38f1de02..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.eclipse.collections.api.factory.Sets; -import org.eclipse.collections.api.set.ImmutableSet; -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.consistency.checking.ConsistencyFlags; -import org.neo4j.consistency.report.ConsistencySummaryStatistics; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.function.ThrowingSupplier; -import org.neo4j.gds.annotation.SuppressForbidden; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineFactoryIdProvider; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.batchimport.AdditionalInitialIds; -import org.neo4j.internal.batchimport.BatchImporter; -import org.neo4j.internal.batchimport.Configuration; -import org.neo4j.internal.batchimport.IncrementalBatchImporter; -import org.neo4j.internal.batchimport.IndexImporterFactory; -import org.neo4j.internal.batchimport.Monitor; -import org.neo4j.internal.batchimport.ReadBehaviour; -import org.neo4j.internal.batchimport.input.Collector; -import org.neo4j.internal.batchimport.input.Input; -import org.neo4j.internal.batchimport.input.LenientStoreInput; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.id.ScanOnOpenReadOnlyIdGeneratorFactory; -import org.neo4j.internal.recordstorage.InMemoryStorageCommandReaderFactory56; -import org.neo4j.internal.recordstorage.StoreTokens; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.layout.recordstorage.RecordDatabaseLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.KernelVersionRepository; -import org.neo4j.kernel.api.index.IndexProvidersAccess; -import org.neo4j.kernel.impl.api.index.IndexProviderMap; -import org.neo4j.kernel.impl.locking.Locks; -import org.neo4j.kernel.impl.store.MetaDataStore; -import org.neo4j.kernel.impl.store.NeoStores; -import org.neo4j.kernel.impl.store.StoreFactory; -import org.neo4j.kernel.impl.store.StoreType; -import org.neo4j.kernel.impl.store.cursor.CachedStoreCursors; -import org.neo4j.kernel.impl.transaction.log.LogTailLogVersionsMetadata; -import org.neo4j.kernel.impl.transaction.log.LogTailMetadata; -import org.neo4j.lock.LockService; -import org.neo4j.logging.InternalLog; -import org.neo4j.logging.InternalLogProvider; -import org.neo4j.logging.NullLogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogFilesInitializer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.SchemaRule44; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.NamedToken; -import org.neo4j.token.api.TokenHolder; -import org.neo4j.token.api.TokensLoader; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UncheckedIOException; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.time.Clock; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - static final String IN_MEMORY_STORAGE_ENGINE_NAME = "in-memory-56"; - - public InMemoryStorageEngineFactory() { - StorageEngineProxyApi.requireNeo4jVersion(Neo4jVersion.V_5_6, StorageEngineFactory.class); - } - - @Override - public byte id() { - return StorageEngineFactoryIdProvider.ID; - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) { - return false; - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - Clock clock, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - DatabaseHealth databaseHealth, - InternalLogProvider internalLogProvider, - InternalLogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - LogTailMetadata logTailMetadata, - KernelVersionRepository kernelVersionRepository, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - idGeneratorFactory, - pageCache, - pageCacheTracer, - fs, - internalLogProvider, - contextFactory, - false, - logTailMetadata - ); - - factory.openNeoStores(StoreType.LABEL_TOKEN).close(); - - return new InMemoryStorageEngineImpl( - databaseLayout, - tokenHolders - ); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache, CursorContext cursorContext - ) { - var fieldAccess = MetaDataStore.getFieldAccess( - pageCache, - RecordDatabaseLayout.convert(databaseLayout).metadataStore(), - databaseLayout.getDatabaseName(), - cursorContext - ); - - try { - return fieldAccess.readDatabaseUUID(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fileSystemAbstraction, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - MemoryTracker memoryTracker, - PageCacheTracer pageCacheTracer, - CursorContextFactory cursorContextFactory, - boolean b - ) { - return List.of(); - } - - @Override - public DatabaseLayout databaseLayout( - Neo4jLayout neo4jLayout, String databaseName - ) { - return RecordDatabaseLayout.of(neo4jLayout, databaseName); - } - - @Override - public DatabaseLayout formatSpecificDatabaseLayout(DatabaseLayout plainLayout) { - return databaseLayout(plainLayout.getNeo4jLayout(), plainLayout.getDatabaseName()); - } - - @SuppressForbidden(reason = "This is the compat layer and we don't really need to go through the proxy") - @Override - public BatchImporter batchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCacheTracer pageCacheTracer, - Configuration configuration, - LogService logService, - PrintStream printStream, - boolean b, - AdditionalInitialIds additionalInitialIds, - Config config, - Monitor monitor, - JobScheduler jobScheduler, - Collector collector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory cursorContextFactory - ) { - throw new UnsupportedOperationException("Batch Import into GDS is not supported"); - } - - @Override - public Input asBatchImporterInput( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - MemoryTracker memoryTracker, - ReadBehaviour readBehaviour, - boolean b, - CursorContextFactory cursorContextFactory, - LogTailMetadata logTailMetadata - ) { - NeoStores neoStores = (new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - logTailMetadata - )).openAllNeoStores(); - return new LenientStoreInput( - neoStores, - readBehaviour.decorateTokenHolders(this.loadReadOnlyTokens(neoStores, true, cursorContextFactory)), - true, - cursorContextFactory, - readBehaviour - ); - } - - @Override - public long optimalAvailableConsistencyCheckerMemory( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache - ) { - return 0; - } - - @Override - public String name() { - return IN_MEMORY_STORAGE_ENGINE_NAME; - } - - @Override - public Set supportedFormats(boolean includeFormatsUnderDevelopment) { - return Set.of(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public boolean supportedFormat(String format, boolean includeFormatsUnderDevelopment) { - return format.equals(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - DatabaseReadOnlyChecker readOnlyChecker, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata, - PageCacheTracer pageCacheTracer - ) { - return new InMemoryMetaDataProviderImpl(); - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - CursorContextFactory cursorContextFactory - ) { - return new InMemoryVersionCheck(); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - boolean b, - Function function, - CursorContextFactory cursorContextFactory - ) { - return List.of(); - } - - @Override - public List load44SchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata - ) { - return List.of(); - } - - @Override - public TokenHolders loadReadOnlyTokens( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - boolean lenient, - CursorContextFactory cursorContextFactory - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - LogTailMetadata.EMPTY_LOG_TAIL - ); - try ( NeoStores stores = factory.openNeoStores( - StoreType.PROPERTY_KEY_TOKEN, StoreType.PROPERTY_KEY_TOKEN_NAME, - StoreType.LABEL_TOKEN, StoreType.LABEL_TOKEN_NAME, - StoreType.RELATIONSHIP_TYPE_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN_NAME ) ) - { - return loadReadOnlyTokens(stores, lenient, cursorContextFactory); - } - } - - private TokenHolders loadReadOnlyTokens( - NeoStores stores, - boolean lenient, - CursorContextFactory cursorContextFactory - ) - { - try ( var cursorContext = cursorContextFactory.create("loadReadOnlyTokens"); - var storeCursors = new CachedStoreCursors( stores, cursorContext ) ) - { - stores.start( cursorContext ); - TokensLoader loader = lenient ? StoreTokens.allReadableTokens( stores ) : StoreTokens.allTokens( stores ); - TokenHolder propertyKeys = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_PROPERTY_KEY ); - TokenHolder labels = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_LABEL ); - TokenHolder relationshipTypes = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_RELATIONSHIP_TYPE ); - - propertyKeys.setInitialTokens( lenient ? unique( loader.getPropertyKeyTokens( storeCursors ) ) : loader.getPropertyKeyTokens( storeCursors ) ); - labels.setInitialTokens( lenient ? unique( loader.getLabelTokens( storeCursors ) ) : loader.getLabelTokens( storeCursors ) ); - relationshipTypes.setInitialTokens( - lenient ? unique( loader.getRelationshipTypeTokens( storeCursors ) ) : loader.getRelationshipTypeTokens( storeCursors ) ); - return new TokenHolders( propertyKeys, labels, relationshipTypes ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - - private static List unique( List tokens ) - { - if ( !tokens.isEmpty() ) - { - Set names = new HashSet<>( tokens.size() ); - int i = 0; - while ( i < tokens.size() ) - { - if ( names.add( tokens.get( i ).name() ) ) - { - i++; - } - else - { - // Remove the token at the given index, by replacing it with the last token in the list. - // This changes the order of elements, but can be done in constant time instead of linear time. - int lastIndex = tokens.size() - 1; - NamedToken endToken = tokens.remove( lastIndex ); - if ( i < lastIndex ) - { - tokens.set( i, endToken ); - } - } - } - } - return tokens; - } - - @Override - public CommandReaderFactory commandReaderFactory() { - return InMemoryStorageCommandReaderFactory56.INSTANCE; - } - - @Override - public void consistencyCheck( - FileSystemAbstraction fileSystem, - DatabaseLayout layout, - Config config, - PageCache pageCache, - IndexProviderMap indexProviders, - InternalLog log, - ConsistencySummaryStatistics summary, - int numberOfThreads, - long maxOffHeapCachingMemory, - OutputStream progressOutput, - boolean verbose, - ConsistencyFlags flags, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer, - LogTailMetadata logTailMetadata - ) { - // we can do no-op, since our "database" is _always_ consistent - } - - @Override - public ImmutableSet getStoreOpenOptions( - FileSystemAbstraction fs, - PageCache pageCache, - DatabaseLayout layout, - CursorContextFactory contextFactory - ) { - // Not sure about this, empty set is returned when the store files are in `little-endian` format - // See: `org.neo4j.kernel.impl.store.format.PageCacheOptionsSelector.select` - return Sets.immutable.empty(); - } - - @Override - public StoreId retrieveStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - return StoreId.retrieveFromStore(fs, databaseLayout, pageCache, cursorContext); - } - - - @Override - public Optional versionInformation(StoreVersionIdentifier storeVersionIdentifier) { - return Optional.of(new InMemoryStoreVersion()); - } - - @Override - public void resetMetadata( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - CursorContextFactory cursorContextFactory, - PageCacheTracer pageCacheTracer, - StoreId storeId, - UUID externalStoreId - ) { - throw new UnsupportedOperationException(); - } - - @Override - public IncrementalBatchImporter incrementalBatchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystem, - PageCacheTracer pageCacheTracer, - Configuration config, - LogService logService, - PrintStream progressOutput, - boolean verboseProgressOutput, - AdditionalInitialIds additionalInitialIds, - ThrowingSupplier logTailMetadataSupplier, - Config dbConfig, - Monitor monitor, - JobScheduler jobScheduler, - Collector badCollector, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - IndexProvidersAccess indexProvidersAccess - ) { - throw new UnsupportedOperationException(); - } - - @Override - public Locks createLocks(Config config, SystemNanoClock clock) { - return Locks.NO_LOCKS; - } - - @Override - public List listStorageFiles( - FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout - ) { - return Collections.emptyList(); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache - ) { - return StorageFilesState.recoveredState(); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineImpl.java deleted file mode 100644 index 3829e6eb59..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageEngineImpl.java +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.counts.CountsAccessor; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.TokenManager; -import org.neo4j.gds.config.GraphProjectConfig; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.core.loading.GraphStoreCatalog; -import org.neo4j.gds.storageengine.InMemoryDatabaseCreationCatalog; -import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor; -import org.neo4j.internal.diagnostics.DiagnosticsLogger; -import org.neo4j.internal.recordstorage.InMemoryStorageReader56; -import org.neo4j.internal.schema.StorageEngineIndexingBehaviour; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.DatabaseFlushEvent; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; -import org.neo4j.kernel.lifecycle.Lifecycle; -import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.lock.LockGroup; -import org.neo4j.lock.LockService; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.logging.InternalLog; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.CommandBatchToApply; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.CommandStream; -import org.neo4j.storageengine.api.IndexUpdateListener; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageCommand; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StoreFileMetadata; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionApplicationMode; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; -import org.neo4j.storageengine.api.txstate.TxStateVisitor; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static org.neo4j.gds.utils.StringFormatting.formatWithLocale; - -public final class InMemoryStorageEngineImpl implements StorageEngine { - - private final MetadataProvider metadataProvider; - private final CypherGraphStore graphStore; - private final DatabaseLayout databaseLayout; - private final InMemoryTransactionStateVisitor txStateVisitor; - - private final CommandCreationContext commandCreationContext; - - private final TokenManager tokenManager; - private final InMemoryCountsStoreImpl countsStore; - - private final StorageEngineIndexingBehaviour indexingBehaviour = () -> false; - - InMemoryStorageEngineImpl( - DatabaseLayout databaseLayout, - TokenHolders tokenHolders - ) { - this.databaseLayout = databaseLayout; - this.graphStore = getGraphStoreFromCatalog(databaseLayout.getDatabaseName()); - this.txStateVisitor = new InMemoryTransactionStateVisitor(graphStore, tokenHolders, false); - this.commandCreationContext = new InMemoryCommandCreationContextImpl(); - this.tokenManager = new TokenManager( - tokenHolders, - InMemoryStorageEngineImpl.this.txStateVisitor, - InMemoryStorageEngineImpl.this.graphStore, - commandCreationContext - ); - InMemoryStorageEngineImpl.this.graphStore.initialize(tokenHolders); - this.countsStore = new InMemoryCountsStoreImpl(graphStore, tokenHolders); - this.metadataProvider = new InMemoryMetaDataProviderImpl(); - } - - private static CypherGraphStore getGraphStoreFromCatalog(String databaseName) { - var graphName = InMemoryDatabaseCreationCatalog.getRegisteredDbCreationGraphName(databaseName); - return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores() - .filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig - .config() - .graphName() - .equals(graphName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(formatWithLocale( - "No graph with name `%s` was found in GraphStoreCatalog. Available graph names are %s", - graphName, - GraphStoreCatalog.getAllGraphStores() - .map(GraphStoreCatalog.GraphStoreWithUserNameAndConfig::config) - .map(GraphProjectConfig::graphName) - .collect(Collectors.toList()) - ))) - .graphStore(); - } - - @Override - public StoreEntityCounters storeEntityCounters() { - return new StoreEntityCounters() { - @Override - public long nodes() { - return graphStore.nodeCount(); - } - - @Override - public long relationships() { - return graphStore.relationshipCount(); - } - - @Override - public long properties() { - return graphStore.nodePropertyKeys().size() + graphStore.relationshipPropertyKeys().size(); - } - - @Override - public long relationshipTypes() { - return graphStore.relationshipTypes().size(); - } - - @Override - public long allNodesCountStore(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public long allRelationshipsCountStore(CursorContext cursorContext) { - return graphStore.relationshipCount(); - } - }; - } - - @Override - public void preAllocateStoreFilesForCommands( - CommandBatchToApply commandBatchToApply, - TransactionApplicationMode transactionApplicationMode - ) { - } - - @Override - public StoreCursors createStorageCursors(CursorContext initialContext) { - return StoreCursors.NULL; - } - - @Override - public StorageLocks createStorageLocks(ResourceLocker locker) { - return new InMemoryStorageLocksImpl(locker); - } - - @Override - public List createCommands( - ReadableTransactionState state, - StorageReader storageReader, - CommandCreationContext creationContext, - LockTracer lockTracer, - TxStateVisitor.Decorator additionalTxStateVisitor, - CursorContext cursorContext, - StoreCursors storeCursors, - MemoryTracker memoryTracker - ) throws KernelException { - state.accept(txStateVisitor); - return List.of(); - } - - @Override - public void dumpDiagnostics(InternalLog internalLog, DiagnosticsLogger diagnosticsLogger) { - } - - @Override - public List createUpgradeCommands( - KernelVersion versionToUpgradeFrom, - KernelVersion versionToUpgradeTo - ) { - return List.of(); - } - - @Override - public StoreId retrieveStoreId() { - return metadataProvider.getStoreId(); - } - - @Override - public StorageEngineIndexingBehaviour indexingBehaviour() { - return indexingBehaviour; - } - - @Override - public StorageReader newReader() { - return new InMemoryStorageReader56(graphStore, tokenManager.tokenHolders(), countsStore); - } - - @Override - public void addIndexUpdateListener(IndexUpdateListener listener) { - - } - - @Override - public void apply(CommandBatchToApply batch, TransactionApplicationMode mode) { - } - - @Override - public void init() { - } - - @Override - public void start() { - - } - - @Override - public void stop() { - shutdown(); - } - - @Override - public void shutdown() { - InMemoryDatabaseCreationCatalog.removeDatabaseEntry(databaseLayout.getDatabaseName()); - } - - @Override - public void listStorageFiles( - Collection atomic, Collection replayable - ) { - - } - - @Override - public Lifecycle schemaAndTokensLifecycle() { - return new LifecycleAdapter() { - @Override - public void init() { - - } - }; - } - - @Override - public CountsAccessor countsAccessor() { - return countsStore; - } - - @Override - public MetadataProvider metadataProvider() { - return metadataProvider; - } - - @Override - public CommandCreationContext newCommandCreationContext() { - return commandCreationContext; - } - - @Override - public void lockRecoveryCommands( - CommandStream commands, LockService lockService, LockGroup lockGroup, TransactionApplicationMode mode - ) { - - } - - @Override - public void rollback(ReadableTransactionState txState, CursorContext cursorContext) { - // rollback is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - // TODO: do we want to inspect the txState to infer if rollback was called explicitly or not? - } - - @Override - public void checkpoint(DatabaseFlushEvent flushEvent, CursorContext cursorContext) { - // checkpoint is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageLocksImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageLocksImpl.java deleted file mode 100644 index 62bb86eb37..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStorageLocksImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; - -public class InMemoryStorageLocksImpl implements StorageLocks { - - InMemoryStorageLocksImpl(ResourceLocker locker) {} - - @Override - public void acquireExclusiveNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveNodeLock(long... ids) {} - - @Override - public void acquireSharedNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedNodeLock(long... ids) {} - - @Override - public void acquireExclusiveRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveRelationshipLock(long... ids) {} - - @Override - public void acquireSharedRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedRelationshipLock(long... ids) {} - - @Override - public void acquireRelationshipCreationLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireRelationshipDeletionLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - long relationship, - boolean relationshipAddedInTx, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireNodeDeletionLock( - ReadableTransactionState readableTransactionState, - LockTracer lockTracer, - long node - ) {} - - @Override - public void acquireNodeLabelChangeLock(LockTracer lockTracer, long node, int labelId) {} -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStoreVersion.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStoreVersion.java deleted file mode 100644 index 8f057a608a..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryStoreVersion.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.format.Capability; -import org.neo4j.storageengine.api.format.CapabilityType; - -import java.util.Optional; - -public class InMemoryStoreVersion implements StoreVersion { - - public static final String STORE_VERSION = "gds-experimental"; - - @Override - public String getStoreVersionUserString() { - return "Unknown"; - } - - @Override - public Optional successorStoreVersion() { - return Optional.empty(); - } - - @Override - public String formatName() { - return getClass().getSimpleName(); - } - - @Override - public boolean onlyForMigration() { - return false; - } - - @Override - public boolean hasCapability(Capability capability) { - return false; - } - - @Override - public boolean hasCompatibleCapabilities( - StoreVersion otherVersion, CapabilityType type - ) { - return false; - } - - @Override - public String introductionNeo4jVersion() { - return "foo"; - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryTransactionIdStoreImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryTransactionIdStoreImpl.java deleted file mode 100644 index fb77020f55..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryTransactionIdStoreImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.internal.recordstorage.AbstractTransactionIdStore; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.kernel.impl.transaction.log.LogPosition; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.TransactionId; -import org.neo4j.storageengine.api.TransactionIdStore; - -public class InMemoryTransactionIdStoreImpl extends AbstractTransactionIdStore { - - @Override - protected void initLastCommittedAndClosedTransactionId( - long previouslyCommittedTxId, - int checksum, - long previouslyCommittedTxCommitTimestamp, - long previouslyCommittedTxLogByteOffset, - long previouslyCommittedTxLogVersion - ) { - this.setLastCommittedAndClosedTransactionId( - previouslyCommittedTxId, - checksum, - previouslyCommittedTxCommitTimestamp, - TransactionIdStore.UNKNOWN_CONSENSUS_INDEX, - previouslyCommittedTxLogByteOffset, - previouslyCommittedTxLogVersion - ); - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - long[] metaData = this.closedTransactionId.get(); - return new ClosedTransactionMetadata( - metaData[0], - new LogPosition(metaData[1], metaData[2]), - (int) metaData[3], - metaData[4], - metaData[5] - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - protected TransactionId transactionId(long transactionId, int checksum, long commitTimestamp) { - return new TransactionId(transactionId, checksum, commitTimestamp, TransactionIdStore.UNKNOWN_CONSENSUS_INDEX); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.offer( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.set( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryVersionCheck.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryVersionCheck.java deleted file mode 100644 index e9a743e106..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/InMemoryVersionCheck.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.impl.store.format.FormatFamily; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; - -import static org.neo4j.gds.compat._56.InMemoryStoreVersion.STORE_VERSION; - -public class InMemoryVersionCheck implements StoreVersionCheck { - - private static final StoreVersionIdentifier STORE_IDENTIFIER = new StoreVersionIdentifier( - STORE_VERSION, - FormatFamily.STANDARD.name(), - 0, - 0 - ); - - @Override - public boolean isCurrentStoreVersionFullySupported(CursorContext cursorContext) { - return true; - } - - @Override - public MigrationCheckResult getAndCheckMigrationTargetVersion(String formatFamily, CursorContext cursorContext) { - return new StoreVersionCheck.MigrationCheckResult(MigrationOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public UpgradeCheckResult getAndCheckUpgradeTargetVersion(CursorContext cursorContext) { - return new StoreVersionCheck.UpgradeCheckResult(UpgradeOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public String getIntroductionVersionFromVersion(StoreVersionIdentifier storeVersionIdentifier) { - return STORE_VERSION; - } - - public StoreVersionIdentifier findLatestVersion(String s) { - return STORE_IDENTIFIER; - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 4d03274003..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_6; - } - - @Override - public StorageEngineProxyApi load() { - return new StorageEngineProxyImpl(); - } - - @Override - public String description() { - return "Storage Engine 5.6"; - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyImpl.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyImpl.java deleted file mode 100644 index 6b0117fb66..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_56/StorageEngineProxyImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._56; - -import org.neo4j.common.Edition; -import org.neo4j.configuration.Config; -import org.neo4j.configuration.GraphDatabaseInternalSettings; -import org.neo4j.dbms.api.DatabaseManagementService; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.compat.GdsDatabaseManagementServiceBuilder; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEntityCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenHolder; - -import static org.neo4j.configuration.GraphDatabaseSettings.db_format; - -public class StorageEngineProxyImpl implements StorageEngineProxyApi { - - @Override - public void initRelationshipTraversalCursorForRelType( - StorageRelationshipTraversalCursor cursor, - long sourceNodeId, - int relTypeToken - ) { - var relationshipSelection = RelationshipSelection.selection( - relTypeToken, - Direction.OUTGOING - ); - cursor.init(sourceNodeId, -1, relationshipSelection); - } - - @Override - public StorageEngine createInMemoryStorageEngine(DatabaseLayout databaseLayout, TokenHolders tokenHolders) { - return new InMemoryStorageEngineImpl(databaseLayout, tokenHolders); - } - - @Override - public void createInMemoryDatabase( - DatabaseManagementService dbms, - String dbName, - Config config - ) { - config.set(db_format, InMemoryStorageEngineFactory.IN_MEMORY_STORAGE_ENGINE_NAME); - dbms.createDatabase(dbName, config); - } - - @Override - public GraphDatabaseService startAndGetInMemoryDatabase(DatabaseManagementService dbms, String dbName) { - dbms.startDatabase(dbName); - return dbms.database(dbName); - } - - @Override - public GdsDatabaseManagementServiceBuilder setSkipDefaultIndexesOnCreationSetting(GdsDatabaseManagementServiceBuilder dbmsBuilder) { - return dbmsBuilder.setConfig(GraphDatabaseInternalSettings.skip_default_indexes_on_creation, true); - } - - @Override - public AbstractInMemoryNodeCursor inMemoryNodeCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryNodePropertyCursor inMemoryNodePropertyCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - return new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipTraversalCursor inMemoryRelationshipTraversalCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipScanCursor inMemoryRelationshipScanCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipPropertyCursor inMemoryRelationshipPropertyCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - @Override - public void properties( - StorageEntityCursor storageCursor, StoragePropertyCursor propertyCursor, int[] propertySelection - ) { - PropertySelection selection; - if (propertySelection.length == 0) { - selection = PropertySelection.ALL_PROPERTIES; - } else { - selection = PropertySelection.selection(propertySelection); - } - storageCursor.properties(propertyCursor, selection); - } - - @Override - public Edition dbmsEdition(GraphDatabaseService databaseService) { - return GraphDatabaseApiProxy.dbmsInfo(databaseService).edition; - } - - @Override - public TokenHolders newTokenHolders() { - return new TokenHolders( - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE) - ); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository56.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository56.java deleted file mode 100644 index 0030425d08..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository56.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.storageengine.api.LogVersionRepository; - -import java.util.concurrent.atomic.AtomicLong; - -public class InMemoryLogVersionRepository56 implements LogVersionRepository { - - private final AtomicLong logVersion; - private final AtomicLong checkpointLogVersion; - - public InMemoryLogVersionRepository56() { - this(0, 0); - } - - private InMemoryLogVersionRepository56(long initialLogVersion, long initialCheckpointLogVersion) { - this.logVersion = new AtomicLong(); - this.checkpointLogVersion = new AtomicLong(); - this.logVersion.set(initialLogVersion); - this.checkpointLogVersion.set(initialCheckpointLogVersion); - } - - @Override - public void setCurrentLogVersion(long version) { - this.logVersion.set(version); - } - - @Override - public long incrementAndGetVersion() { - return this.logVersion.incrementAndGet(); - } - - @Override - public void setCheckpointLogVersion(long version) { - this.checkpointLogVersion.set(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return this.checkpointLogVersion.incrementAndGet(); - } - - @Override - public long getCurrentLogVersion() { - return this.logVersion.get(); - } - - @Override - public long getCheckpointLogVersion() { - return this.checkpointLogVersion.get(); - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory56.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory56.java deleted file mode 100644 index 188dfd8314..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory56.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.kernel.KernelVersion; -import org.neo4j.storageengine.api.CommandReader; -import org.neo4j.storageengine.api.CommandReaderFactory; - -public class InMemoryStorageCommandReaderFactory56 implements CommandReaderFactory { - - public static final CommandReaderFactory INSTANCE = new InMemoryStorageCommandReaderFactory56(); - - @Override - public CommandReader get(KernelVersion kernelVersion) { - switch (kernelVersion) { - case V4_2: - return LogCommandSerializationV4_2.INSTANCE; - case V4_3_D4: - return LogCommandSerializationV4_3_D3.INSTANCE; - case V5_0: - return LogCommandSerializationV5_0.INSTANCE; - default: - throw new IllegalArgumentException("Unsupported kernel version " + kernelVersion); - } - } -} diff --git a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader56.java b/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader56.java deleted file mode 100644 index b49417cf15..0000000000 --- a/compatibility/5.6/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader56.java +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.common.EntityType; -import org.neo4j.common.TokenNameLookup; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.gds.compat._56.InMemoryNodeCursor; -import org.neo4j.gds.compat._56.InMemoryPropertyCursor; -import org.neo4j.gds.compat._56.InMemoryRelationshipScanCursor; -import org.neo4j.gds.compat._56.InMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.schema.ConstraintDescriptor; -import org.neo4j.internal.schema.IndexDescriptor; -import org.neo4j.internal.schema.IndexType; -import org.neo4j.internal.schema.SchemaDescriptor; -import org.neo4j.internal.schema.constraints.IndexBackedConstraintDescriptor; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StorageRelationshipScanCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.storageengine.api.StorageSchemaReader; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -public class InMemoryStorageReader56 implements StorageReader { - - protected final CypherGraphStore graphStore; - protected final TokenHolders tokenHolders; - protected final CountsAccessor counts; - private final Map, Object> dependantState; - private boolean closed; - - public InMemoryStorageReader56( - CypherGraphStore graphStore, - TokenHolders tokenHolders, - CountsAccessor counts - ) { - this.graphStore = graphStore; - - this.tokenHolders = tokenHolders; - this.counts = counts; - this.dependantState = new ConcurrentHashMap<>(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] changedLabels, - long[] unchangedLabels, - int[] propertyKeyIds, - boolean propertyKeyListIsComplete, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public long relationshipsGetCount(CursorContext cursorTracer) { - return graphStore.relationshipCount(); - } - - @Override - public boolean nodeExists(long id, StoreCursors storeCursors) { - var originalId = graphStore.nodes().toOriginalNodeId(id); - return graphStore.nodes().containsOriginalId(originalId); - } - - @Override - public boolean relationshipExists(long id, StoreCursors storeCursors) { - return true; - } - - @Override - public StorageNodeCursor allocateNodeCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public StoragePropertyCursor allocatePropertyCursor( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - return new InMemoryPropertyCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipTraversalCursor allocateRelationshipTraversalCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipScanCursor allocateRelationshipScanCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public IndexDescriptor indexGetForSchemaAndType( - SchemaDescriptor descriptor, IndexType type - ) { - return null; - } - - @Override - public AllRelationshipsScan allRelationshipScan() { - return new AbstractInMemoryAllRelationshipScan() { - @Override - boolean scanRange(AbstractInMemoryRelationshipScanCursor cursor, long start, long stopInclusive) { - return cursor.scanRange(start, stopInclusive); - } - - @Override - public boolean scanBatch(long sizeHint, AbstractInMemoryRelationshipScanCursor cursor) { - return super.scanBatch(sizeHint, cursor); - } - }; - } - - @Override - public Iterator indexGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForRelationshipType(int relationshipType) { - return Collections.emptyIterator(); - } - - @Override - public IndexDescriptor indexGetForName(String name) { - return null; - } - - @Override - public ConstraintDescriptor constraintGetForName(String name) { - return null; - } - - @Override - public boolean indexExists(IndexDescriptor index) { - return false; - } - - @Override - public Iterator indexesGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int propertyKeyId, EntityType entityType - ) { - return valueIndexesGetRelated(tokens, new int[]{propertyKeyId}, entityType); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int[] propertyKeyIds, EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] labels, - int propertyKeyId, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] tokens, - int[] propertyKeyIds, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public boolean hasRelatedSchema(long[] labels, int propertyKey, EntityType entityType) { - return false; - } - - @Override - public boolean hasRelatedSchema(int label, EntityType entityType) { - return false; - } - - @Override - public Iterator constraintsGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public boolean constraintExists(ConstraintDescriptor descriptor) { - return false; - } - - @Override - public Iterator constraintsGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetForRelationshipType(int typeId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Long indexGetOwningUniquenessConstraintId(IndexDescriptor index) { - return null; - } - - @Override - public long countsForNode(int labelId, CursorContext cursorContext) { - return counts.nodeCount(labelId, cursorContext); - } - - @Override - public long countsForRelationship(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - return counts.relationshipCount(startLabelId, typeId, endLabelId, cursorContext); - } - - @Override - public long nodesGetCount(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public int labelCount() { - return graphStore.nodes().availableNodeLabels().size(); - } - - @Override - public int propertyKeyCount() { - int nodePropertyCount = graphStore - .schema() - .nodeSchema() - .allProperties() - .size(); - int relPropertyCount = graphStore - .schema() - .relationshipSchema() - .allProperties() - .size(); - return nodePropertyCount + relPropertyCount; - } - - @Override - public int relationshipTypeCount() { - return graphStore.schema().relationshipSchema().availableTypes().size(); - } - - @Override - public T getOrCreateSchemaDependantState(Class type, Function factory) { - return type.cast(dependantState.computeIfAbsent(type, key -> factory.apply(this))); - } - - @Override - public AllNodeScan allNodeScan() { - return new InMemoryNodeScan(); - } - - @Override - public void close() { - assert !closed; - closed = true; - } - - @Override - public StorageSchemaReader schemaSnapshot() { - return this; - } - - @Override - public TokenNameLookup tokenNameLookup() { - return tokenHolders; - } - -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/build.gradle b/compatibility/5.7/neo4j-kernel-adapter/build.gradle deleted file mode 100644 index 13b63175d2..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Neo4j Kernel Adapter 5.7' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.7' - - compileOnly project(':annotations') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'annotations', version: neos.'5.7' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.7' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.7' - compileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.7' - - implementation project(':neo4j-kernel-adapter-api') - implementation project(':neo4j-kernel-adapter-5-common') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - compileOnly project(':annotations') - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - implementation project(':neo4j-kernel-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.7' - - java17CompileOnly project(':annotations') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.7' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.7' - java17CompileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.7' - - java17Implementation project(':neo4j-kernel-adapter-api') - java17Implementation project(':neo4j-kernel-adapter-5-common') - } -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java b/compatibility/5.7/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 48377e059a..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public Neo4jProxyApi load() { - throw new UnsupportedOperationException("5.7 compatibility requires JDK17"); - } - - @Override - public String description() { - return "Neo4j 5.7 (placeholder)"; - } -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/BoltTransactionRunnerImpl.java b/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/BoltTransactionRunnerImpl.java deleted file mode 100644 index 6a4b13ca2c..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/BoltTransactionRunnerImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.bolt.dbapi.BoltGraphDatabaseServiceSPI; -import org.neo4j.bolt.dbapi.BoltTransaction; -import org.neo4j.bolt.protocol.common.bookmark.Bookmark; -import org.neo4j.bolt.protocol.common.message.AccessMode; -import org.neo4j.bolt.protocol.common.message.request.connection.RoutingContext; -import org.neo4j.bolt.tx.statement.StatementQuerySubscriber; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.BoltQuerySubscriber; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.graphdb.QueryStatistics; -import org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo; -import org.neo4j.internal.kernel.api.security.LoginContext; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.impl.query.QueryExecutionConfiguration; -import org.neo4j.kernel.impl.query.QueryExecutionKernelException; -import org.neo4j.values.virtual.MapValue; - -import java.time.Duration; -import java.util.List; -import java.util.Map; - -public class BoltTransactionRunnerImpl extends BoltTransactionRunner { - - @Override - protected BoltQuerySubscriber boltQuerySubscriber() { - var subscriber = new StatementQuerySubscriber(); - return new BoltQuerySubscriber<>() { - @Override - public void assertSucceeded() throws KernelException { - subscriber.assertSuccess(); - } - - @Override - public QueryStatistics queryStatistics() { - return subscriber.getStatistics(); - } - - @Override - public StatementQuerySubscriber innerSubscriber() { - return subscriber; - } - }; - } - - @Override - protected void executeQuery( - BoltTransaction boltTransaction, - String query, - MapValue parameters, - StatementQuerySubscriber querySubscriber - ) throws QueryExecutionKernelException { - boltTransaction.executeQuery(query, parameters, true, querySubscriber); - } - - @Override - protected BoltTransaction beginBoltWriteTransaction( - BoltGraphDatabaseServiceSPI fabricDb, - LoginContext loginContext, - KernelTransaction.Type kernelTransactionType, - ClientConnectionInfo clientConnectionInfo, - List bookmarks, - Duration txTimeout, - Map txMetadata - ) { - return fabricDb.beginTransaction( - kernelTransactionType, - loginContext, - clientConnectionInfo, - bookmarks, - txTimeout, - AccessMode.WRITE, - txMetadata, - new RoutingContext(true, Map.of()), - QueryExecutionConfiguration.DEFAULT_CONFIG - ); - } -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java b/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 4b88ffcb48..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_7; - } - - @Override - public Neo4jProxyApi load() { - return new Neo4jProxyImpl(); - } - - @Override - public String description() { - return "Neo4j 5.7"; - } -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyImpl.java b/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyImpl.java deleted file mode 100644 index 75051f3d13..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/Neo4jProxyImpl.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.common.DependencyResolver; -import org.neo4j.fabric.FabricDatabaseManager; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.GlobalProcedureRegistry; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StoreScan; -import org.neo4j.gds.compat._5x.CommonNeo4jProxyImpl; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.NodeCursor; -import org.neo4j.internal.kernel.api.NodeLabelIndexCursor; -import org.neo4j.internal.kernel.api.PartitionedScan; -import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.RelationshipScanCursor; -import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.procs.FieldSignature; -import org.neo4j.internal.kernel.api.procs.ProcedureSignature; -import org.neo4j.internal.kernel.api.procs.QualifiedName; -import org.neo4j.internal.kernel.api.procs.UserFunctionSignature; -import org.neo4j.internal.kernel.api.security.AccessMode; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.context.EmptyVersionContextSupplier; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.procedure.Context; -import org.neo4j.kernel.api.procedure.GlobalProcedures; -import org.neo4j.kernel.impl.store.RecordStore; -import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.procedure.Mode; - -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public final class Neo4jProxyImpl extends CommonNeo4jProxyImpl { - - @Override - public long getHighId(RecordStore recordStore) { - return recordStore.getIdGenerator().getHighId(); - } - - @Override - public T lookupComponentProvider(Context ctx, Class component, boolean safe) throws ProcedureException { - var globalProcedures = GraphDatabaseApiProxy.resolveDependency( - ctx.dependencyResolver(), - GlobalProcedures.class - ); - return globalProcedures.getCurrentView().lookupComponentProvider(component, safe).apply(ctx); - } - - @Override - public List> entityCursorScan( - KernelTransaction transaction, - int[] labelIds, - int batchSize, - boolean allowPartitionedScan - ) { - if (allowPartitionedScan) { - return this.partitionedCursorScan(transaction, batchSize, labelIds); - } else { - var read = transaction.dataRead(); - return Arrays - .stream(labelIds) - .mapToObj(read::nodeLabelScan) - .map(scan -> new ScanBasedStoreScanImpl<>(scan, batchSize)) - .collect(Collectors.toList()); - } - } - - @Override - public StoreScan nodeLabelIndexScan( - KernelTransaction transaction, - int labelId, - int batchSize, - boolean allowPartitionedScan - ) { - if (allowPartitionedScan) { - return this.partitionedCursorScan(transaction, batchSize, labelId).get(0); - } else { - var read = transaction.dataRead(); - var scan = read.nodeLabelScan(labelId); - return new ScanBasedStoreScanImpl<>(scan, batchSize); - } - } - - @Override - public StoreScan nodesScan(KernelTransaction ktx, long nodeCount, int batchSize) { - return new ScanBasedStoreScanImpl<>(ktx.dataRead().allNodesScan(), batchSize); - } - - @Override - public StoreScan relationshipsScan( - KernelTransaction ktx, - long relationshipCount, - int batchSize - ) { - return new ScanBasedStoreScanImpl<>(ktx.dataRead().allRelationshipsScan(), batchSize); - } - - @Override - public BoltTransactionRunner boltTransactionRunner() { - return new BoltTransactionRunnerImpl(); - } - - @Override - public ProcedureSignature procedureSignature( - QualifiedName name, - List inputSignature, - List outputSignature, - Mode mode, - boolean admin, - String deprecated, - String description, - String warning, - boolean eager, - boolean caseInsensitive, - boolean systemProcedure, - boolean internal, - boolean allowExpiredCredentials, - boolean threadSafe - ) { - return new ProcedureSignature( - name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials - ); - } - - @Override - public GlobalProcedureRegistry globalProcedureRegistry(GlobalProcedures globalProcedures) { - return new GlobalProcedureRegistry() { - @Override - public Set getAllProcedures() { - return globalProcedures.getAllProcedures(); - } - - @Override - public Stream getAllNonAggregatingFunctions() { - return globalProcedures.getAllNonAggregatingFunctions(); - } - - @Override - public Stream getAllAggregatingFunctions() { - return globalProcedures.getAllAggregatingFunctions(); - } - }; - } - - private static final DependencyResolver EMPTY_DEPENDENCY_RESOLVER = new DependencyResolver.Adapter() { - @Override - public T resolveDependency(Class type, SelectionStrategy selector) { - return null; - } - - @Override - public boolean containsDependency(Class type) { - return false; - } - }; - - @Override - public DependencyResolver emptyDependencyResolver() { - return EMPTY_DEPENDENCY_RESOLVER; - } - - @Override - public CursorContextFactory cursorContextFactory(Optional pageCacheTracer) { - return pageCacheTracer.map(cacheTracer -> new CursorContextFactory( - cacheTracer, - EmptyVersionContextSupplier.EMPTY - )).orElse(CursorContextFactory.NULL_CONTEXT_FACTORY); - } - - @Override - public CompatExecutionContext executionContext(KernelTransaction ktx) { - var stmt = ktx.acquireStatement(); - var ctx = ktx.createExecutionContext(); - return new CompatExecutionContext() { - @Override - public CursorContext cursorContext() { - return ctx.cursorContext(); - } - - @Override - public AccessMode accessMode() { - return ctx.securityContext().mode(); - } - - @Override - public boolean reservePartition(PartitionedScan scan, C cursor) { - return scan.reservePartition(cursor, ctx); - } - - @Override - public void close() { - ctx.complete(); - ctx.close(); - stmt.close(); - } - }; - } - - @Override - public String neo4jArrowServerAddressHeader() { - throw new UnsupportedOperationException("Not implemented for Neo4j versions <5.14"); - } - - @Override - public boolean isCompositeDatabase(GraphDatabaseService databaseService) { - var databaseManager = GraphDatabaseApiProxy.resolveDependency(databaseService, FabricDatabaseManager.class); - return databaseManager.isFabricDatabase(GraphDatabaseApiProxy.databaseId(databaseService)); - } - - @Override - public long estimateNodeCount(Read read, int label) { - return read.countsForNodeWithoutTxState(label); - } - - @Override - public long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type) { - return read.countsForRelationshipWithoutTxState(sourceLabel, type, targetLabel); - } -} diff --git a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/ScanBasedStoreScanImpl.java b/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/ScanBasedStoreScanImpl.java deleted file mode 100644 index b74157c0f6..0000000000 --- a/compatibility/5.7/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_57/ScanBasedStoreScanImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.StoreScan; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.Scan; - -public final class ScanBasedStoreScanImpl implements StoreScan { - private final Scan scan; - private final int batchSize; - - public ScanBasedStoreScanImpl(Scan scan, int batchSize) { - this.scan = scan; - this.batchSize = batchSize; - } - - @Override - public boolean reserveBatch(C cursor, CompatExecutionContext ctx) { - return scan.reserveBatch(cursor, batchSize, ctx.cursorContext(), ctx.accessMode()); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/build.gradle b/compatibility/5.7/storage-engine-adapter/build.gradle deleted file mode 100644 index de7e7ff71d..0000000000 --- a/compatibility/5.7/storage-engine-adapter/build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Storage Engine Adapter 5.7' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.7' - - compileOnly project(':annotations') - compileOnly project(':progress-tracking') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.7' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.7' - - implementation project(':core') - implementation project(':storage-engine-adapter-api') - implementation project(':config-api') - implementation project(':string-formatting') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'neo4j-kernel-api', version: ver.'neo4j' - - implementation project(':neo4j-adapter') - implementation project(':storage-engine-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.7' - - java17CompileOnly project(':annotations') - java17CompileOnly project(':progress-tracking') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.7' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.7' - - - java17Implementation project(':core') - java17Implementation project(':storage-engine-adapter-api') - java17Implementation project(':config-api') - java17Implementation project(':string-formatting') - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java b/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java deleted file mode 100644 index ad053e0bae..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.id.IdController; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.lock.LockService; -import org.neo4j.logging.LogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogVersionRepository; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.TransactionIdStore; -import org.neo4j.storageengine.migration.RollingUpgradeCompatibility; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccess; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.token.TokenHolders; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - @Override - public String name() { - return "unsupported57"; - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - PageCacheTracer pageCacheTracer - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(String storeVersion) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(StoreId storeId) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public RollingUpgradeCompatibility rollingUpgradeCompatibility() { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fs, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - PageCacheTracer cacheTracer, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - IdController idController, - DatabaseHealth databaseHealth, - LogProvider internalLogProvider, - LogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - PageCacheTracer cacheTracer, - boolean createStoreIfNotExists, - DatabaseReadOnlyChecker readOnlyChecker, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public List listStorageFiles(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) throws - IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout, PageCache pageCache) { - return false; - } - - @Override - public TransactionIdStore readOnlyTransactionIdStore( - FileSystemAbstraction filySystem, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public LogVersionRepository readOnlyLogVersionRepository( - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer cacheTracer, - DatabaseReadOnlyChecker readOnlyChecker - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public StoreId storeId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public void setStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - StoreId storeId, - long upgradeTxChecksum, - long upgradeTxCommitTimestamp - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public void setExternalStoreUUID( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - UUID externalStoreId - ) throws IOException { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public SchemaRuleMigrationAccess schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - LogService logService, - String recordFormats, - PageCacheTracer cacheTracer, - CursorContext cursorContext, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache - ) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public CommandReaderFactory commandReaderFactory() { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public DatabaseLayout databaseLayout(Neo4jLayout neo4jLayout, String databaseName) { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 76b6f44b52..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public StorageEngineProxyApi load() { - throw new UnsupportedOperationException("5.7 storage engine requires JDK17"); - } - - @Override - public String description() { - return "Storage Engine 5.7"; - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCommandCreationContextImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCommandCreationContextImpl.java deleted file mode 100644 index 11f042220e..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCommandCreationContextImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.configuration.Config; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.KernelVersionProvider; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.cursor.StoreCursors; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; - -public class InMemoryCommandCreationContextImpl implements CommandCreationContext { - - private final AtomicLong schemaTokens; - private final AtomicInteger propertyTokens; - private final AtomicInteger labelTokens; - private final AtomicInteger typeTokens; - - InMemoryCommandCreationContextImpl() { - this.schemaTokens = new AtomicLong(0); - this.propertyTokens = new AtomicInteger(0); - this.labelTokens = new AtomicInteger(0); - this.typeTokens = new AtomicInteger(0); - } - - @Override - public long reserveNode() { - throw new UnsupportedOperationException("Creating nodes is not supported"); - } - - @Override - public long reserveRelationship( - long sourceNode, - long targetNode, - int relationshipType, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - throw new UnsupportedOperationException("Creating relationships is not supported"); - } - - @Override - public long reserveSchema() { - return schemaTokens.getAndIncrement(); - } - - @Override - public int reserveLabelTokenId() { - return labelTokens.getAndIncrement(); - } - - @Override - public int reservePropertyKeyTokenId() { - return propertyTokens.getAndIncrement(); - } - - @Override - public int reserveRelationshipTypeTokenId() { - return typeTokens.getAndIncrement(); - } - - @Override - public void close() { - - } - - @Override - public void initialize( - KernelVersionProvider kernelVersionProvider, - CursorContext cursorContext, - StoreCursors storeCursors, - Supplier oldestActiveTransactionSequenceNumber, - ResourceLocker locks, - Supplier lockTracer - ) { - - } - - @Override - public KernelVersion kernelVersion() { - // NOTE: Double-check if this is still correct when you copy this into a new compat layer - return KernelVersion.getLatestVersion(Config.newBuilder().build()); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCountsStoreImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCountsStoreImpl.java deleted file mode 100644 index 3f6f64ecaa..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryCountsStoreImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.documented.ReporterFactory; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.counts.CountsStorage; -import org.neo4j.counts.CountsVisitor; -import org.neo4j.gds.NodeLabel; -import org.neo4j.gds.api.GraphStore; -import org.neo4j.internal.helpers.progress.ProgressMonitorFactory; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.FileFlushEvent; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenNotFoundException; - -public class InMemoryCountsStoreImpl implements CountsStorage, CountsAccessor { - - private final GraphStore graphStore; - private final TokenHolders tokenHolders; - - public InMemoryCountsStoreImpl( - GraphStore graphStore, - TokenHolders tokenHolders - ) { - - this.graphStore = graphStore; - this.tokenHolders = tokenHolders; - } - - @Override - public void start( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - - } - - @Override - public void checkpoint(FileFlushEvent fileFlushEvent, CursorContext cursorContext) { - - } - - @Override - public long nodeCount(int labelId, CursorContext cursorContext) { - if (labelId == -1) { - return graphStore.nodeCount(); - } - - String nodeLabel; - try { - nodeLabel = tokenHolders.labelTokens().getTokenById(labelId).name(); - } catch (TokenNotFoundException e) { - throw new RuntimeException(e); - } - return graphStore.nodes().nodeCount(NodeLabel.of(nodeLabel)); - } - - @Override - public long relationshipCount(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - // TODO: this is quite wrong - return graphStore.relationshipCount(); - } - - @Override - public boolean consistencyCheck( - ReporterFactory reporterFactory, - CursorContextFactory contextFactory, - int numThreads, - ProgressMonitorFactory progressMonitorFactory - ) { - return true; - } - - @Override - public CountsAccessor.Updater apply(long txId, boolean isLast, CursorContext cursorContext) { - throw new UnsupportedOperationException("Updates are not supported"); - } - - @Override - public void close() { - - } - - @Override - public void accept(CountsVisitor visitor, CursorContext cursorContext) { - tokenHolders.labelTokens().getAllTokens().forEach(labelToken -> { - visitor.visitNodeCount(labelToken.id(), nodeCount(labelToken.id(), cursorContext)); - }); - - visitor.visitRelationshipCount(-1, -1, -1, graphStore.relationshipCount()); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryMetaDataProviderImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryMetaDataProviderImpl.java deleted file mode 100644 index 42a8f5a357..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryMetaDataProviderImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.internal.recordstorage.InMemoryLogVersionRepository57; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.ExternalStoreId; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionId; - -import java.io.IOException; -import java.util.Optional; -import java.util.UUID; - -public class InMemoryMetaDataProviderImpl implements MetadataProvider { - - private final ExternalStoreId externalStoreId; - private final InMemoryLogVersionRepository57 logVersionRepository; - private final InMemoryTransactionIdStoreImpl transactionIdStore; - - InMemoryMetaDataProviderImpl() { - this.logVersionRepository = new InMemoryLogVersionRepository57(); - this.externalStoreId = new ExternalStoreId(UUID.randomUUID()); - this.transactionIdStore = new InMemoryTransactionIdStoreImpl(); - } - - @Override - public ExternalStoreId getExternalStoreId() { - return this.externalStoreId; - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - return this.transactionIdStore.getLastClosedTransaction(); - } - - @Override - public void setCurrentLogVersion(long version) { - logVersionRepository.setCurrentLogVersion(version); - } - - @Override - public long incrementAndGetVersion() { - return logVersionRepository.incrementAndGetVersion(); - } - - @Override - public void setCheckpointLogVersion(long version) { - logVersionRepository.setCheckpointLogVersion(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return logVersionRepository.incrementAndGetCheckpointLogVersion(); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - transactionIdStore.transactionCommitted(transactionId, checksum, commitTimestamp, consensusIndex); - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - transactionIdStore.setLastCommittedAndClosedTransactionId( - transactionId, - checksum, - commitTimestamp, - consensusIndex, - byteOffset, - logVersion - ); - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.transactionClosed( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.resetLastClosedTransaction( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - public void regenerateMetadata(StoreId storeId, UUID externalStoreUUID, CursorContext cursorContext) { - } - - @Override - public StoreId getStoreId() { - return StoreId.UNKNOWN; - } - - @Override - public void close() throws IOException { - } - - @Override - public long getCurrentLogVersion() { - return this.logVersionRepository.getCurrentLogVersion(); - } - - @Override - public long getCheckpointLogVersion() { - return this.logVersionRepository.getCheckpointLogVersion(); - } - - @Override - public long nextCommittingTransactionId() { - return this.transactionIdStore.nextCommittingTransactionId(); - } - - @Override - public long committingTransactionId() { - return this.transactionIdStore.committingTransactionId(); - } - - @Override - public long getLastCommittedTransactionId() { - return this.transactionIdStore.getLastCommittedTransactionId(); - } - - @Override - public TransactionId getLastCommittedTransaction() { - return this.transactionIdStore.getLastCommittedTransaction(); - } - - @Override - public long getLastClosedTransactionId() { - return this.transactionIdStore.getLastClosedTransactionId(); - } - - @Override - public Optional getDatabaseIdUuid(CursorContext cursorTracer) { - throw new IllegalStateException("Not supported"); - } - - @Override - public void setDatabaseIdUuid(UUID uuid, CursorContext cursorContext) { - throw new IllegalStateException("Not supported"); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodeCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodeCursor.java deleted file mode 100644 index 3c3a968884..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodeCursor.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.api.GraphStore; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.Degrees; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodeCursor extends AbstractInMemoryNodeCursor { - - public InMemoryNodeCursor(GraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public boolean hasLabel() { - return hasAtLeastOneLabelForCurrentNode(); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor, PropertySelection selection) { - propertyCursor.initNodeProperties(propertiesReference(), selection); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor) { - properties(propertyCursor, PropertySelection.ALL_PROPERTIES); - } - - @Override - public boolean supportsFastRelationshipsTo() { - return false; - } - - @Override - public void relationshipsTo( - StorageRelationshipTraversalCursor storageRelationshipTraversalCursor, - RelationshipSelection relationshipSelection, - long neighbourNodeReference - ) { - throw new UnsupportedOperationException(); - } - - @Override - public void degrees(RelationshipSelection selection, Degrees.Mutator mutator) { - } - - @Override - public boolean scanBatch(AllNodeScan allNodeScan, long sizeHint) { - return super.scanBatch(allNodeScan, (int) sizeHint); - } - - @Override - public long[] labels() { - return longLabels(); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodePropertyCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodePropertyCursor.java deleted file mode 100644 index 1a18e5ff26..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryNodePropertyCursor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodePropertyCursor extends AbstractInMemoryNodePropertyCursor { - - public InMemoryNodePropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - reset(); - setId(((LongReference) reference).id); - setPropertySelection(new InMemoryPropertySelectionImpl(selection)); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertyCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertyCursor.java deleted file mode 100644 index 693f57da32..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertyCursor.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.AbstractInMemoryPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryPropertyCursor extends AbstractInMemoryPropertyCursor { - - public InMemoryPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(reference, selection); - } - - @Override - public void initNodeProperties(StorageNodeCursor nodeCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(nodeCursor, selection); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(relationshipCursor, selection); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(reference, selection); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertySelectionImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertySelectionImpl.java deleted file mode 100644 index 3ab5d56cc9..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryPropertySelectionImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.InMemoryPropertySelection; -import org.neo4j.storageengine.api.PropertySelection; - -public class InMemoryPropertySelectionImpl implements InMemoryPropertySelection { - - private final PropertySelection propertySelection; - - public InMemoryPropertySelectionImpl(PropertySelection propertySelection) {this.propertySelection = propertySelection;} - - @Override - public boolean isLimited() { - return propertySelection.isLimited(); - } - - @Override - public int numberOfKeys() { - return propertySelection.numberOfKeys(); - } - - @Override - public int key(int index) { - return propertySelection.key(index); - } - - @Override - public boolean test(int key) { - return propertySelection.test(key); - } - - @Override - public boolean isKeysOnly() { - return propertySelection.isKeysOnly(); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipPropertyCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipPropertyCursor.java deleted file mode 100644 index 34befce80f..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipPropertyCursor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.storageengine.InMemoryRelationshipCursor; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipPropertyCursor extends AbstractInMemoryRelationshipPropertyCursor { - - InMemoryRelationshipPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - - } - - @Override - public void initRelationshipProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - var relationshipId = ((LongReference) reference).id; - var relationshipCursor = new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - relationshipCursor.single(relationshipId); - relationshipCursor.next(); - relationshipCursor.properties(this, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - var inMemoryRelationshipCursor = (InMemoryRelationshipCursor) relationshipCursor; - inMemoryRelationshipCursor.properties(this, selection); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipScanCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipScanCursor.java deleted file mode 100644 index 332dd46668..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipScanCursor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipScanCursor extends AbstractInMemoryRelationshipScanCursor { - - public InMemoryRelationshipScanCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - super(graphStore, tokenHolders); - } - - @Override - public void single(long reference, long sourceNodeReference, int type, long targetNodeReference) { - single(reference); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor storagePropertyCursor, PropertySelection propertySelection - ) { - properties(storagePropertyCursor, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public boolean scanBatch(AllRelationshipsScan allRelationshipsScan, long sizeHint) { - return super.scanBatch(allRelationshipsScan, (int) sizeHint); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipTraversalCursor.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipTraversalCursor.java deleted file mode 100644 index 7ac42153d3..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryRelationshipTraversalCursor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipTraversalCursor extends AbstractInMemoryRelationshipTraversalCursor { - - public InMemoryRelationshipTraversalCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor propertyCursor, PropertySelection selection - ) { - properties(propertyCursor, new InMemoryPropertySelectionImpl(selection)); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java deleted file mode 100644 index 64aeddeaaa..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.eclipse.collections.api.factory.Sets; -import org.eclipse.collections.api.set.ImmutableSet; -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.consistency.checking.ConsistencyFlags; -import org.neo4j.consistency.report.ConsistencySummaryStatistics; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.function.ThrowingSupplier; -import org.neo4j.gds.annotation.SuppressForbidden; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineFactoryIdProvider; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.batchimport.AdditionalInitialIds; -import org.neo4j.internal.batchimport.BatchImporter; -import org.neo4j.internal.batchimport.Configuration; -import org.neo4j.internal.batchimport.IncrementalBatchImporter; -import org.neo4j.internal.batchimport.IndexImporterFactory; -import org.neo4j.internal.batchimport.Monitor; -import org.neo4j.internal.batchimport.ReadBehaviour; -import org.neo4j.internal.batchimport.input.Collector; -import org.neo4j.internal.batchimport.input.Input; -import org.neo4j.internal.batchimport.input.LenientStoreInput; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.id.ScanOnOpenReadOnlyIdGeneratorFactory; -import org.neo4j.internal.recordstorage.InMemoryStorageCommandReaderFactory57; -import org.neo4j.internal.recordstorage.StoreTokens; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.layout.recordstorage.RecordDatabaseLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.KernelVersionRepository; -import org.neo4j.kernel.api.index.IndexProvidersAccess; -import org.neo4j.kernel.impl.api.index.IndexProviderMap; -import org.neo4j.kernel.impl.locking.Locks; -import org.neo4j.kernel.impl.store.MetaDataStore; -import org.neo4j.kernel.impl.store.NeoStores; -import org.neo4j.kernel.impl.store.StoreFactory; -import org.neo4j.kernel.impl.store.StoreType; -import org.neo4j.kernel.impl.store.cursor.CachedStoreCursors; -import org.neo4j.kernel.impl.transaction.log.LogTailLogVersionsMetadata; -import org.neo4j.kernel.impl.transaction.log.LogTailMetadata; -import org.neo4j.lock.LockService; -import org.neo4j.logging.InternalLog; -import org.neo4j.logging.InternalLogProvider; -import org.neo4j.logging.NullLogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogFilesInitializer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.SchemaRule44; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.NamedToken; -import org.neo4j.token.api.TokenHolder; -import org.neo4j.token.api.TokensLoader; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UncheckedIOException; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.time.Clock; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - static final String IN_MEMORY_STORAGE_ENGINE_NAME = "in-memory-57"; - - public InMemoryStorageEngineFactory() { - StorageEngineProxyApi.requireNeo4jVersion(Neo4jVersion.V_5_7, StorageEngineFactory.class); - } - - @Override - public byte id() { - return StorageEngineFactoryIdProvider.ID; - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) { - return false; - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - Clock clock, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - DatabaseHealth databaseHealth, - InternalLogProvider internalLogProvider, - InternalLogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - LogTailMetadata logTailMetadata, - KernelVersionRepository kernelVersionRepository, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - idGeneratorFactory, - pageCache, - pageCacheTracer, - fs, - internalLogProvider, - contextFactory, - false, - logTailMetadata - ); - - factory.openNeoStores(StoreType.LABEL_TOKEN).close(); - - return new InMemoryStorageEngineImpl( - databaseLayout, - tokenHolders - ); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache, CursorContext cursorContext - ) { - var fieldAccess = MetaDataStore.getFieldAccess( - pageCache, - RecordDatabaseLayout.convert(databaseLayout).metadataStore(), - databaseLayout.getDatabaseName(), - cursorContext - ); - - try { - return fieldAccess.readDatabaseUUID(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fileSystemAbstraction, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - MemoryTracker memoryTracker, - PageCacheTracer pageCacheTracer, - CursorContextFactory cursorContextFactory, - boolean b - ) { - return List.of(); - } - - @Override - public DatabaseLayout databaseLayout( - Neo4jLayout neo4jLayout, String databaseName - ) { - return RecordDatabaseLayout.of(neo4jLayout, databaseName); - } - - @Override - public DatabaseLayout formatSpecificDatabaseLayout(DatabaseLayout plainLayout) { - return databaseLayout(plainLayout.getNeo4jLayout(), plainLayout.getDatabaseName()); - } - - @SuppressForbidden(reason = "This is the compat layer and we don't really need to go through the proxy") - @Override - public BatchImporter batchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCacheTracer pageCacheTracer, - Configuration configuration, - LogService logService, - PrintStream printStream, - boolean b, - AdditionalInitialIds additionalInitialIds, - Config config, - Monitor monitor, - JobScheduler jobScheduler, - Collector collector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory cursorContextFactory - ) { - throw new UnsupportedOperationException("Batch Import into GDS is not supported"); - } - - @Override - public Input asBatchImporterInput( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - MemoryTracker memoryTracker, - ReadBehaviour readBehaviour, - boolean b, - CursorContextFactory cursorContextFactory, - LogTailMetadata logTailMetadata - ) { - NeoStores neoStores = (new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - logTailMetadata - )).openAllNeoStores(); - return new LenientStoreInput( - neoStores, - readBehaviour.decorateTokenHolders(this.loadReadOnlyTokens(neoStores, true, cursorContextFactory)), - true, - cursorContextFactory, - readBehaviour - ); - } - - @Override - public long optimalAvailableConsistencyCheckerMemory( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache - ) { - return 0; - } - - @Override - public String name() { - return IN_MEMORY_STORAGE_ENGINE_NAME; - } - - @Override - public Set supportedFormats(boolean includeFormatsUnderDevelopment) { - return Set.of(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public boolean supportedFormat(String format, boolean includeFormatsUnderDevelopment) { - return format.equals(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - DatabaseReadOnlyChecker readOnlyChecker, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata, - PageCacheTracer pageCacheTracer - ) { - return new InMemoryMetaDataProviderImpl(); - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - CursorContextFactory cursorContextFactory - ) { - return new InMemoryVersionCheck(); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - boolean b, - Function function, - CursorContextFactory cursorContextFactory - ) { - return List.of(); - } - - @Override - public List load44SchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata - ) { - return List.of(); - } - - @Override - public TokenHolders loadReadOnlyTokens( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - boolean lenient, - CursorContextFactory cursorContextFactory - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - LogTailMetadata.EMPTY_LOG_TAIL - ); - try ( NeoStores stores = factory.openNeoStores( - StoreType.PROPERTY_KEY_TOKEN, StoreType.PROPERTY_KEY_TOKEN_NAME, - StoreType.LABEL_TOKEN, StoreType.LABEL_TOKEN_NAME, - StoreType.RELATIONSHIP_TYPE_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN_NAME ) ) - { - return loadReadOnlyTokens(stores, lenient, cursorContextFactory); - } - } - - private TokenHolders loadReadOnlyTokens( - NeoStores stores, - boolean lenient, - CursorContextFactory cursorContextFactory - ) - { - try ( var cursorContext = cursorContextFactory.create("loadReadOnlyTokens"); - var storeCursors = new CachedStoreCursors( stores, cursorContext ) ) - { - stores.start( cursorContext ); - TokensLoader loader = lenient ? StoreTokens.allReadableTokens( stores ) : StoreTokens.allTokens( stores ); - TokenHolder propertyKeys = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_PROPERTY_KEY ); - TokenHolder labels = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_LABEL ); - TokenHolder relationshipTypes = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_RELATIONSHIP_TYPE ); - - propertyKeys.setInitialTokens( lenient ? unique( loader.getPropertyKeyTokens( storeCursors ) ) : loader.getPropertyKeyTokens( storeCursors ) ); - labels.setInitialTokens( lenient ? unique( loader.getLabelTokens( storeCursors ) ) : loader.getLabelTokens( storeCursors ) ); - relationshipTypes.setInitialTokens( - lenient ? unique( loader.getRelationshipTypeTokens( storeCursors ) ) : loader.getRelationshipTypeTokens( storeCursors ) ); - return new TokenHolders( propertyKeys, labels, relationshipTypes ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - - private static List unique( List tokens ) - { - if ( !tokens.isEmpty() ) - { - Set names = new HashSet<>( tokens.size() ); - int i = 0; - while ( i < tokens.size() ) - { - if ( names.add( tokens.get( i ).name() ) ) - { - i++; - } - else - { - // Remove the token at the given index, by replacing it with the last token in the list. - // This changes the order of elements, but can be done in constant time instead of linear time. - int lastIndex = tokens.size() - 1; - NamedToken endToken = tokens.remove( lastIndex ); - if ( i < lastIndex ) - { - tokens.set( i, endToken ); - } - } - } - } - return tokens; - } - - @Override - public CommandReaderFactory commandReaderFactory() { - return InMemoryStorageCommandReaderFactory57.INSTANCE; - } - - @Override - public void consistencyCheck( - FileSystemAbstraction fileSystem, - DatabaseLayout layout, - Config config, - PageCache pageCache, - IndexProviderMap indexProviders, - InternalLog log, - ConsistencySummaryStatistics summary, - int numberOfThreads, - long maxOffHeapCachingMemory, - OutputStream progressOutput, - boolean verbose, - ConsistencyFlags flags, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer, - LogTailMetadata logTailMetadata - ) { - // we can do no-op, since our "database" is _always_ consistent - } - - @Override - public ImmutableSet getStoreOpenOptions( - FileSystemAbstraction fs, - PageCache pageCache, - DatabaseLayout layout, - CursorContextFactory contextFactory - ) { - // Not sure about this, empty set is returned when the store files are in `little-endian` format - // See: `org.neo4j.kernel.impl.store.format.PageCacheOptionsSelector.select` - return Sets.immutable.empty(); - } - - @Override - public StoreId retrieveStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - return StoreId.retrieveFromStore(fs, databaseLayout, pageCache, cursorContext); - } - - - @Override - public Optional versionInformation(StoreVersionIdentifier storeVersionIdentifier) { - return Optional.of(new InMemoryStoreVersion()); - } - - @Override - public void resetMetadata( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - CursorContextFactory cursorContextFactory, - PageCacheTracer pageCacheTracer, - StoreId storeId, - UUID externalStoreId - ) { - throw new UnsupportedOperationException(); - } - - @Override - public IncrementalBatchImporter incrementalBatchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystem, - PageCacheTracer pageCacheTracer, - Configuration config, - LogService logService, - PrintStream progressOutput, - boolean verboseProgressOutput, - AdditionalInitialIds additionalInitialIds, - ThrowingSupplier logTailMetadataSupplier, - Config dbConfig, - Monitor monitor, - JobScheduler jobScheduler, - Collector badCollector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - IndexProvidersAccess indexProvidersAccess - ) { - throw new UnsupportedOperationException(); - } - - @Override - public Locks createLocks(Config config, SystemNanoClock clock) { - return Locks.NO_LOCKS; - } - - @Override - public List listStorageFiles( - FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout - ) { - return Collections.emptyList(); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache - ) { - return StorageFilesState.recoveredState(); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineImpl.java deleted file mode 100644 index b773034bc5..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageEngineImpl.java +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.counts.CountsAccessor; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.TokenManager; -import org.neo4j.gds.config.GraphProjectConfig; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.core.loading.GraphStoreCatalog; -import org.neo4j.gds.storageengine.InMemoryDatabaseCreationCatalog; -import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor; -import org.neo4j.internal.diagnostics.DiagnosticsLogger; -import org.neo4j.internal.recordstorage.InMemoryStorageReader57; -import org.neo4j.internal.schema.StorageEngineIndexingBehaviour; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.DatabaseFlushEvent; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; -import org.neo4j.kernel.lifecycle.Lifecycle; -import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.lock.LockGroup; -import org.neo4j.lock.LockService; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.logging.InternalLog; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.CommandBatchToApply; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.CommandStream; -import org.neo4j.storageengine.api.IndexUpdateListener; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageCommand; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StoreFileMetadata; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionApplicationMode; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; -import org.neo4j.storageengine.api.txstate.TxStateVisitor; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static org.neo4j.gds.utils.StringFormatting.formatWithLocale; - -public final class InMemoryStorageEngineImpl implements StorageEngine { - - private final MetadataProvider metadataProvider; - private final CypherGraphStore graphStore; - private final DatabaseLayout databaseLayout; - private final InMemoryTransactionStateVisitor txStateVisitor; - - private final CommandCreationContext commandCreationContext; - - private final TokenManager tokenManager; - private final InMemoryCountsStoreImpl countsStore; - - private final StorageEngineIndexingBehaviour indexingBehaviour = () -> false; - - InMemoryStorageEngineImpl( - DatabaseLayout databaseLayout, - TokenHolders tokenHolders - ) { - this.databaseLayout = databaseLayout; - this.graphStore = getGraphStoreFromCatalog(databaseLayout.getDatabaseName()); - this.txStateVisitor = new InMemoryTransactionStateVisitor(graphStore, tokenHolders, false); - this.commandCreationContext = new InMemoryCommandCreationContextImpl(); - this.tokenManager = new TokenManager( - tokenHolders, - InMemoryStorageEngineImpl.this.txStateVisitor, - InMemoryStorageEngineImpl.this.graphStore, - commandCreationContext - ); - InMemoryStorageEngineImpl.this.graphStore.initialize(tokenHolders); - this.countsStore = new InMemoryCountsStoreImpl(graphStore, tokenHolders); - this.metadataProvider = new InMemoryMetaDataProviderImpl(); - } - - private static CypherGraphStore getGraphStoreFromCatalog(String databaseName) { - var graphName = InMemoryDatabaseCreationCatalog.getRegisteredDbCreationGraphName(databaseName); - return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores() - .filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig - .config() - .graphName() - .equals(graphName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(formatWithLocale( - "No graph with name `%s` was found in GraphStoreCatalog. Available graph names are %s", - graphName, - GraphStoreCatalog.getAllGraphStores() - .map(GraphStoreCatalog.GraphStoreWithUserNameAndConfig::config) - .map(GraphProjectConfig::graphName) - .collect(Collectors.toList()) - ))) - .graphStore(); - } - - @Override - public StoreEntityCounters storeEntityCounters() { - return new StoreEntityCounters() { - @Override - public long nodes() { - return graphStore.nodeCount(); - } - - @Override - public long relationships() { - return graphStore.relationshipCount(); - } - - @Override - public long properties() { - return graphStore.nodePropertyKeys().size() + graphStore.relationshipPropertyKeys().size(); - } - - @Override - public long relationshipTypes() { - return graphStore.relationshipTypes().size(); - } - - @Override - public long allNodesCountStore(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public long allRelationshipsCountStore(CursorContext cursorContext) { - return graphStore.relationshipCount(); - } - }; - } - - @Override - public void preAllocateStoreFilesForCommands( - CommandBatchToApply commandBatchToApply, - TransactionApplicationMode transactionApplicationMode - ) { - } - - @Override - public StoreCursors createStorageCursors(CursorContext initialContext) { - return StoreCursors.NULL; - } - - @Override - public StorageLocks createStorageLocks(ResourceLocker locker) { - return new InMemoryStorageLocksImpl(locker); - } - - @Override - public List createCommands( - ReadableTransactionState state, - StorageReader storageReader, - CommandCreationContext creationContext, - LockTracer lockTracer, - TxStateVisitor.Decorator additionalTxStateVisitor, - CursorContext cursorContext, - StoreCursors storeCursors, - MemoryTracker memoryTracker - ) throws KernelException { - state.accept(txStateVisitor); - return List.of(); - } - - @Override - public void dumpDiagnostics(InternalLog internalLog, DiagnosticsLogger diagnosticsLogger) { - } - - @Override - public List createUpgradeCommands( - KernelVersion versionToUpgradeFrom, - KernelVersion versionToUpgradeTo - ) { - return List.of(); - } - - @Override - public StoreId retrieveStoreId() { - return metadataProvider.getStoreId(); - } - - @Override - public StorageEngineIndexingBehaviour indexingBehaviour() { - return indexingBehaviour; - } - - @Override - public StorageReader newReader() { - return new InMemoryStorageReader57(graphStore, tokenManager.tokenHolders(), countsStore); - } - - @Override - public void addIndexUpdateListener(IndexUpdateListener listener) { - - } - - @Override - public void apply(CommandBatchToApply batch, TransactionApplicationMode mode) { - } - - @Override - public void init() { - } - - @Override - public void start() { - - } - - @Override - public void stop() { - shutdown(); - } - - @Override - public void shutdown() { - InMemoryDatabaseCreationCatalog.removeDatabaseEntry(databaseLayout.getDatabaseName()); - } - - @Override - public void listStorageFiles( - Collection atomic, Collection replayable - ) { - - } - - @Override - public Lifecycle schemaAndTokensLifecycle() { - return new LifecycleAdapter() { - @Override - public void init() { - - } - }; - } - - @Override - public CountsAccessor countsAccessor() { - return countsStore; - } - - @Override - public MetadataProvider metadataProvider() { - return metadataProvider; - } - - @Override - public CommandCreationContext newCommandCreationContext() { - return commandCreationContext; - } - - @Override - public void lockRecoveryCommands( - CommandStream commands, LockService lockService, LockGroup lockGroup, TransactionApplicationMode mode - ) { - - } - - @Override - public void rollback(ReadableTransactionState txState, CursorContext cursorContext) { - // rollback is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - // TODO: do we want to inspect the txState to infer if rollback was called explicitly or not? - } - - @Override - public void checkpoint(DatabaseFlushEvent flushEvent, CursorContext cursorContext) { - // checkpoint is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageLocksImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageLocksImpl.java deleted file mode 100644 index aa89bea2c7..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStorageLocksImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; - -public class InMemoryStorageLocksImpl implements StorageLocks { - - InMemoryStorageLocksImpl(ResourceLocker locker) {} - - @Override - public void acquireExclusiveNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveNodeLock(long... ids) {} - - @Override - public void acquireSharedNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedNodeLock(long... ids) {} - - @Override - public void acquireExclusiveRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveRelationshipLock(long... ids) {} - - @Override - public void acquireSharedRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedRelationshipLock(long... ids) {} - - @Override - public void acquireRelationshipCreationLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireRelationshipDeletionLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - long relationship, - boolean relationshipAddedInTx, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireNodeDeletionLock( - ReadableTransactionState readableTransactionState, - LockTracer lockTracer, - long node - ) {} - - @Override - public void acquireNodeLabelChangeLock(LockTracer lockTracer, long node, int labelId) {} -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStoreVersion.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStoreVersion.java deleted file mode 100644 index 3ab0f1cf00..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryStoreVersion.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.format.Capability; -import org.neo4j.storageengine.api.format.CapabilityType; - -import java.util.Optional; - -public class InMemoryStoreVersion implements StoreVersion { - - public static final String STORE_VERSION = "gds-experimental"; - - @Override - public String getStoreVersionUserString() { - return "Unknown"; - } - - @Override - public Optional successorStoreVersion() { - return Optional.empty(); - } - - @Override - public String formatName() { - return getClass().getSimpleName(); - } - - @Override - public boolean onlyForMigration() { - return false; - } - - @Override - public boolean hasCapability(Capability capability) { - return false; - } - - @Override - public boolean hasCompatibleCapabilities( - StoreVersion otherVersion, CapabilityType type - ) { - return false; - } - - @Override - public String introductionNeo4jVersion() { - return "foo"; - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryTransactionIdStoreImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryTransactionIdStoreImpl.java deleted file mode 100644 index 976995f6ad..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryTransactionIdStoreImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.internal.recordstorage.AbstractTransactionIdStore; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.kernel.impl.transaction.log.LogPosition; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.TransactionId; -import org.neo4j.storageengine.api.TransactionIdStore; - -public class InMemoryTransactionIdStoreImpl extends AbstractTransactionIdStore { - - @Override - protected void initLastCommittedAndClosedTransactionId( - long previouslyCommittedTxId, - int checksum, - long previouslyCommittedTxCommitTimestamp, - long previouslyCommittedTxLogByteOffset, - long previouslyCommittedTxLogVersion - ) { - this.setLastCommittedAndClosedTransactionId( - previouslyCommittedTxId, - checksum, - previouslyCommittedTxCommitTimestamp, - TransactionIdStore.UNKNOWN_CONSENSUS_INDEX, - previouslyCommittedTxLogByteOffset, - previouslyCommittedTxLogVersion - ); - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - long[] metaData = this.closedTransactionId.get(); - return new ClosedTransactionMetadata( - metaData[0], - new LogPosition(metaData[1], metaData[2]), - (int) metaData[3], - metaData[4], - metaData[5] - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - protected TransactionId transactionId(long transactionId, int checksum, long commitTimestamp) { - return new TransactionId(transactionId, checksum, commitTimestamp, TransactionIdStore.UNKNOWN_CONSENSUS_INDEX); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.offer( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.set( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryVersionCheck.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryVersionCheck.java deleted file mode 100644 index 18ea10e4da..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/InMemoryVersionCheck.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.impl.store.format.FormatFamily; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; - -import static org.neo4j.gds.compat._57.InMemoryStoreVersion.STORE_VERSION; - -public class InMemoryVersionCheck implements StoreVersionCheck { - - private static final StoreVersionIdentifier STORE_IDENTIFIER = new StoreVersionIdentifier( - STORE_VERSION, - FormatFamily.STANDARD.name(), - 0, - 0 - ); - - @Override - public boolean isCurrentStoreVersionFullySupported(CursorContext cursorContext) { - return true; - } - - @Override - public MigrationCheckResult getAndCheckMigrationTargetVersion(String formatFamily, CursorContext cursorContext) { - return new StoreVersionCheck.MigrationCheckResult(MigrationOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public UpgradeCheckResult getAndCheckUpgradeTargetVersion(CursorContext cursorContext) { - return new StoreVersionCheck.UpgradeCheckResult(UpgradeOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public String getIntroductionVersionFromVersion(StoreVersionIdentifier storeVersionIdentifier) { - return STORE_VERSION; - } - - public StoreVersionIdentifier findLatestVersion(String s) { - return STORE_IDENTIFIER; - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index 67197cacc4..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_7; - } - - @Override - public StorageEngineProxyApi load() { - return new StorageEngineProxyImpl(); - } - - @Override - public String description() { - return "Storage Engine 5.7"; - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyImpl.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyImpl.java deleted file mode 100644 index 48e0abdbb6..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_57/StorageEngineProxyImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._57; - -import org.neo4j.common.Edition; -import org.neo4j.configuration.Config; -import org.neo4j.configuration.GraphDatabaseInternalSettings; -import org.neo4j.dbms.api.DatabaseManagementService; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.compat.GdsDatabaseManagementServiceBuilder; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEntityCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenHolder; - -import static org.neo4j.configuration.GraphDatabaseSettings.db_format; - -public class StorageEngineProxyImpl implements StorageEngineProxyApi { - - @Override - public void initRelationshipTraversalCursorForRelType( - StorageRelationshipTraversalCursor cursor, - long sourceNodeId, - int relTypeToken - ) { - var relationshipSelection = RelationshipSelection.selection( - relTypeToken, - Direction.OUTGOING - ); - cursor.init(sourceNodeId, -1, relationshipSelection); - } - - @Override - public StorageEngine createInMemoryStorageEngine(DatabaseLayout databaseLayout, TokenHolders tokenHolders) { - return new InMemoryStorageEngineImpl(databaseLayout, tokenHolders); - } - - @Override - public void createInMemoryDatabase( - DatabaseManagementService dbms, - String dbName, - Config config - ) { - config.set(db_format, InMemoryStorageEngineFactory.IN_MEMORY_STORAGE_ENGINE_NAME); - dbms.createDatabase(dbName, config); - } - - @Override - public GraphDatabaseService startAndGetInMemoryDatabase(DatabaseManagementService dbms, String dbName) { - dbms.startDatabase(dbName); - return dbms.database(dbName); - } - - @Override - public GdsDatabaseManagementServiceBuilder setSkipDefaultIndexesOnCreationSetting(GdsDatabaseManagementServiceBuilder dbmsBuilder) { - return dbmsBuilder.setConfig(GraphDatabaseInternalSettings.skip_default_indexes_on_creation, true); - } - - @Override - public AbstractInMemoryNodeCursor inMemoryNodeCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryNodePropertyCursor inMemoryNodePropertyCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - return new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipTraversalCursor inMemoryRelationshipTraversalCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipScanCursor inMemoryRelationshipScanCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipPropertyCursor inMemoryRelationshipPropertyCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - @Override - public void properties( - StorageEntityCursor storageCursor, StoragePropertyCursor propertyCursor, int[] propertySelection - ) { - PropertySelection selection; - if (propertySelection.length == 0) { - selection = PropertySelection.ALL_PROPERTIES; - } else { - selection = PropertySelection.selection(propertySelection); - } - storageCursor.properties(propertyCursor, selection); - } - - @Override - public Edition dbmsEdition(GraphDatabaseService databaseService) { - return GraphDatabaseApiProxy.dbmsInfo(databaseService).edition; - } - - @Override - public TokenHolders newTokenHolders() { - return new TokenHolders( - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE) - ); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository57.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository57.java deleted file mode 100644 index 7fb6d12a43..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository57.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.storageengine.api.LogVersionRepository; - -import java.util.concurrent.atomic.AtomicLong; - -public class InMemoryLogVersionRepository57 implements LogVersionRepository { - - private final AtomicLong logVersion; - private final AtomicLong checkpointLogVersion; - - public InMemoryLogVersionRepository57() { - this(0, 0); - } - - private InMemoryLogVersionRepository57(long initialLogVersion, long initialCheckpointLogVersion) { - this.logVersion = new AtomicLong(); - this.checkpointLogVersion = new AtomicLong(); - this.logVersion.set(initialLogVersion); - this.checkpointLogVersion.set(initialCheckpointLogVersion); - } - - @Override - public void setCurrentLogVersion(long version) { - this.logVersion.set(version); - } - - @Override - public long incrementAndGetVersion() { - return this.logVersion.incrementAndGet(); - } - - @Override - public void setCheckpointLogVersion(long version) { - this.checkpointLogVersion.set(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return this.checkpointLogVersion.incrementAndGet(); - } - - @Override - public long getCurrentLogVersion() { - return this.logVersion.get(); - } - - @Override - public long getCheckpointLogVersion() { - return this.checkpointLogVersion.get(); - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory57.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory57.java deleted file mode 100644 index 02fdf497d4..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory57.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.kernel.KernelVersion; -import org.neo4j.storageengine.api.CommandReader; -import org.neo4j.storageengine.api.CommandReaderFactory; - -public class InMemoryStorageCommandReaderFactory57 implements CommandReaderFactory { - - public static final CommandReaderFactory INSTANCE = new InMemoryStorageCommandReaderFactory57(); - - @Override - public CommandReader get(KernelVersion kernelVersion) { - switch (kernelVersion) { - case V4_2: - return LogCommandSerializationV4_2.INSTANCE; - case V4_3_D4: - return LogCommandSerializationV4_3_D3.INSTANCE; - case V5_0: - return LogCommandSerializationV5_0.INSTANCE; - default: - throw new IllegalArgumentException("Unsupported kernel version " + kernelVersion); - } - } -} diff --git a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader57.java b/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader57.java deleted file mode 100644 index 883627b3d3..0000000000 --- a/compatibility/5.7/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader57.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.eclipse.collections.api.set.primitive.IntSet; -import org.eclipse.collections.impl.set.immutable.primitive.ImmutableIntSetFactoryImpl; -import org.neo4j.common.EntityType; -import org.neo4j.common.TokenNameLookup; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.gds.compat._57.InMemoryNodeCursor; -import org.neo4j.gds.compat._57.InMemoryPropertyCursor; -import org.neo4j.gds.compat._57.InMemoryRelationshipScanCursor; -import org.neo4j.gds.compat._57.InMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.schema.ConstraintDescriptor; -import org.neo4j.internal.schema.IndexDescriptor; -import org.neo4j.internal.schema.IndexType; -import org.neo4j.internal.schema.SchemaDescriptor; -import org.neo4j.internal.schema.constraints.IndexBackedConstraintDescriptor; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StorageRelationshipScanCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.storageengine.api.StorageSchemaReader; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -public class InMemoryStorageReader57 implements StorageReader { - - protected final CypherGraphStore graphStore; - protected final TokenHolders tokenHolders; - protected final CountsAccessor counts; - private final Map, Object> dependantState; - private boolean closed; - - public InMemoryStorageReader57( - CypherGraphStore graphStore, - TokenHolders tokenHolders, - CountsAccessor counts - ) { - this.graphStore = graphStore; - - this.tokenHolders = tokenHolders; - this.counts = counts; - this.dependantState = new ConcurrentHashMap<>(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] changedLabels, - long[] unchangedLabels, - int[] propertyKeyIds, - boolean propertyKeyListIsComplete, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public long relationshipsGetCount(CursorContext cursorTracer) { - return graphStore.relationshipCount(); - } - - @Override - public boolean nodeExists(long id, StoreCursors storeCursors) { - var originalId = graphStore.nodes().toOriginalNodeId(id); - return graphStore.nodes().containsOriginalId(originalId); - } - - @Override - public boolean relationshipExists(long id, StoreCursors storeCursors) { - return true; - } - - @Override - public StorageNodeCursor allocateNodeCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public StoragePropertyCursor allocatePropertyCursor( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - return new InMemoryPropertyCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipTraversalCursor allocateRelationshipTraversalCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipScanCursor allocateRelationshipScanCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public IndexDescriptor indexGetForSchemaAndType( - SchemaDescriptor descriptor, IndexType type - ) { - return null; - } - - @Override - public AllRelationshipsScan allRelationshipScan() { - return new AbstractInMemoryAllRelationshipScan() { - @Override - boolean scanRange(AbstractInMemoryRelationshipScanCursor cursor, long start, long stopInclusive) { - return cursor.scanRange(start, stopInclusive); - } - - @Override - public boolean scanBatch(long sizeHint, AbstractInMemoryRelationshipScanCursor cursor) { - return super.scanBatch(sizeHint, cursor); - } - }; - } - - @Override - public Iterator indexGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForRelationshipType(int relationshipType) { - return Collections.emptyIterator(); - } - - @Override - public IndexDescriptor indexGetForName(String name) { - return null; - } - - @Override - public ConstraintDescriptor constraintGetForName(String name) { - return null; - } - - @Override - public boolean indexExists(IndexDescriptor index) { - return false; - } - - @Override - public Iterator indexesGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int propertyKeyId, EntityType entityType - ) { - return valueIndexesGetRelated(tokens, new int[]{propertyKeyId}, entityType); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int[] propertyKeyIds, EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] labels, - int propertyKeyId, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] tokens, - int[] propertyKeyIds, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public boolean hasRelatedSchema(long[] labels, int propertyKey, EntityType entityType) { - return false; - } - - @Override - public boolean hasRelatedSchema(int label, EntityType entityType) { - return false; - } - - @Override - public Iterator constraintsGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public boolean constraintExists(ConstraintDescriptor descriptor) { - return false; - } - - @Override - public Iterator constraintsGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetForRelationshipType(int typeId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetAll() { - return Collections.emptyIterator(); - } - - @Override - public IntSet constraintsGetPropertyTokensForLogicalKey(int token, EntityType entityType) { - return ImmutableIntSetFactoryImpl.INSTANCE.empty(); - } - - @Override - public Long indexGetOwningUniquenessConstraintId(IndexDescriptor index) { - return null; - } - - @Override - public long countsForNode(int labelId, CursorContext cursorContext) { - return counts.nodeCount(labelId, cursorContext); - } - - @Override - public long countsForRelationship(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - return counts.relationshipCount(startLabelId, typeId, endLabelId, cursorContext); - } - - @Override - public long nodesGetCount(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public int labelCount() { - return graphStore.nodes().availableNodeLabels().size(); - } - - @Override - public int propertyKeyCount() { - int nodePropertyCount = graphStore - .schema() - .nodeSchema() - .allProperties() - .size(); - int relPropertyCount = graphStore - .schema() - .relationshipSchema() - .allProperties() - .size(); - return nodePropertyCount + relPropertyCount; - } - - @Override - public int relationshipTypeCount() { - return graphStore.schema().relationshipSchema().availableTypes().size(); - } - - @Override - public T getOrCreateSchemaDependantState(Class type, Function factory) { - return type.cast(dependantState.computeIfAbsent(type, key -> factory.apply(this))); - } - - @Override - public AllNodeScan allNodeScan() { - return new InMemoryNodeScan(); - } - - @Override - public void close() { - assert !closed; - closed = true; - } - - @Override - public StorageSchemaReader schemaSnapshot() { - return this; - } - - @Override - public TokenNameLookup tokenNameLookup() { - return tokenHolders; - } - -} diff --git a/compatibility/5.8/neo4j-kernel-adapter/build.gradle b/compatibility/5.8/neo4j-kernel-adapter/build.gradle deleted file mode 100644 index e0ce9e4a91..0000000000 --- a/compatibility/5.8/neo4j-kernel-adapter/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Neo4j Kernel Adapter 5.8' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.8' - - compileOnly project(':annotations') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'annotations', version: neos.'5.8' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.8' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.8' - compileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.8' - - implementation project(':neo4j-kernel-adapter-api') - implementation project(':neo4j-kernel-adapter-5-common') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - compileOnly project(':annotations') - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - implementation project(':neo4j-kernel-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.8' - - java17CompileOnly project(':annotations') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.8' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.8' - java17CompileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.8' - - java17Implementation project(':neo4j-kernel-adapter-api') - java17Implementation project(':neo4j-kernel-adapter-5-common') - } -} diff --git a/compatibility/5.8/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java b/compatibility/5.8/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 2ddab471d9..0000000000 --- a/compatibility/5.8/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public Neo4jProxyApi load() { - throw new UnsupportedOperationException("5.8 compatibility requires JDK17"); - } - - @Override - public String description() { - return "Neo4j 5.8 (placeholder)"; - } -} diff --git a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/BoltTransactionRunnerImpl.java b/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/BoltTransactionRunnerImpl.java deleted file mode 100644 index 1e8ee11452..0000000000 --- a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/BoltTransactionRunnerImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.bolt.dbapi.BoltGraphDatabaseServiceSPI; -import org.neo4j.bolt.dbapi.BoltTransaction; -import org.neo4j.bolt.protocol.common.message.AccessMode; -import org.neo4j.bolt.protocol.common.message.request.connection.RoutingContext; -import org.neo4j.bolt.tx.statement.StatementQuerySubscriber; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.BoltQuerySubscriber; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.graphdb.QueryStatistics; -import org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo; -import org.neo4j.internal.kernel.api.security.LoginContext; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.impl.query.QueryExecutionConfiguration; -import org.neo4j.kernel.impl.query.QueryExecutionKernelException; -import org.neo4j.values.virtual.MapValue; - -import java.time.Duration; -import java.util.List; -import java.util.Map; - -public class BoltTransactionRunnerImpl extends BoltTransactionRunner { - - @Override - protected BoltQuerySubscriber boltQuerySubscriber() { - var subscriber = new StatementQuerySubscriber(); - return new BoltQuerySubscriber<>() { - @Override - public void assertSucceeded() throws KernelException { - subscriber.assertSuccess(); - } - - @Override - public QueryStatistics queryStatistics() { - return subscriber.getStatistics(); - } - - @Override - public StatementQuerySubscriber innerSubscriber() { - return subscriber; - } - }; - } - - @Override - protected void executeQuery( - BoltTransaction boltTransaction, - String query, - MapValue parameters, - StatementQuerySubscriber querySubscriber - ) throws QueryExecutionKernelException { - boltTransaction.executeQuery(query, parameters, true, querySubscriber); - } - - @Override - protected BoltTransaction beginBoltWriteTransaction( - BoltGraphDatabaseServiceSPI fabricDb, - LoginContext loginContext, - KernelTransaction.Type kernelTransactionType, - ClientConnectionInfo clientConnectionInfo, - List bookmarks, - Duration txTimeout, - Map txMetadata - ) { - return fabricDb.beginTransaction( - kernelTransactionType, - loginContext, - clientConnectionInfo, - bookmarks, - txTimeout, - AccessMode.WRITE, - txMetadata, - new RoutingContext(true, Map.of()), - QueryExecutionConfiguration.DEFAULT_CONFIG - ); - } -} diff --git a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java b/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 47ec85af7a..0000000000 --- a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_8; - } - - @Override - public Neo4jProxyApi load() { - return new Neo4jProxyImpl(); - } - - @Override - public String description() { - return "Neo4j 5.8"; - } -} diff --git a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyImpl.java b/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyImpl.java deleted file mode 100644 index 4eaaa78308..0000000000 --- a/compatibility/5.8/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_58/Neo4jProxyImpl.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.common.DependencyResolver; -import org.neo4j.fabric.FabricDatabaseManager; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.GlobalProcedureRegistry; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat._5x.CommonNeo4jProxyImpl; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.PartitionedScan; -import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.procs.FieldSignature; -import org.neo4j.internal.kernel.api.procs.ProcedureSignature; -import org.neo4j.internal.kernel.api.procs.QualifiedName; -import org.neo4j.internal.kernel.api.procs.UserFunctionSignature; -import org.neo4j.internal.kernel.api.security.AccessMode; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.context.EmptyVersionContextSupplier; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.procedure.Context; -import org.neo4j.kernel.api.procedure.GlobalProcedures; -import org.neo4j.kernel.impl.store.RecordStore; -import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.procedure.Mode; - -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Stream; - -public final class Neo4jProxyImpl extends CommonNeo4jProxyImpl { - - @Override - public long getHighId(RecordStore recordStore) { - return recordStore.getIdGenerator().getHighId(); - } - - @Override - public T lookupComponentProvider(Context ctx, Class component, boolean safe) throws ProcedureException { - var globalProcedures = GraphDatabaseApiProxy.resolveDependency( - ctx.dependencyResolver(), - GlobalProcedures.class - ); - return globalProcedures.getCurrentView().lookupComponentProvider(component, safe).apply(ctx); - } - - @Override - public BoltTransactionRunner boltTransactionRunner() { - return new BoltTransactionRunnerImpl(); - } - - @Override - public ProcedureSignature procedureSignature( - QualifiedName name, - List inputSignature, - List outputSignature, - Mode mode, - boolean admin, - String deprecated, - String description, - String warning, - boolean eager, - boolean caseInsensitive, - boolean systemProcedure, - boolean internal, - boolean allowExpiredCredentials, - boolean threadSafe - ) { - return new ProcedureSignature( - name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials - ); - } - - @Override - public GlobalProcedureRegistry globalProcedureRegistry(GlobalProcedures globalProcedures) { - return new GlobalProcedureRegistry() { - @Override - public Set getAllProcedures() { - return globalProcedures.getAllProcedures(); - } - - @Override - public Stream getAllNonAggregatingFunctions() { - return globalProcedures.getAllNonAggregatingFunctions(); - } - - @Override - public Stream getAllAggregatingFunctions() { - return globalProcedures.getAllAggregatingFunctions(); - } - }; - } - - private static final DependencyResolver EMPTY_DEPENDENCY_RESOLVER = new DependencyResolver.Adapter() { - @Override - public T resolveDependency(Class type, SelectionStrategy selector) { - return null; - } - - @Override - public boolean containsDependency(Class type) { - return false; - } - }; - - @Override - public DependencyResolver emptyDependencyResolver() { - return EMPTY_DEPENDENCY_RESOLVER; - } - - @Override - public CursorContextFactory cursorContextFactory(Optional pageCacheTracer) { - return pageCacheTracer.map(cacheTracer -> new CursorContextFactory( - cacheTracer, - EmptyVersionContextSupplier.EMPTY - )).orElse(CursorContextFactory.NULL_CONTEXT_FACTORY); - } - - @Override - public CompatExecutionContext executionContext(KernelTransaction ktx) { - var stmt = ktx.acquireStatement(); - var ctx = ktx.createExecutionContext(); - return new CompatExecutionContext() { - @Override - public CursorContext cursorContext() { - return ctx.cursorContext(); - } - - @Override - public AccessMode accessMode() { - return ctx.securityContext().mode(); - } - - @Override - public boolean reservePartition(PartitionedScan scan, C cursor) { - return scan.reservePartition(cursor, ctx); - } - - @Override - public void close() { - ctx.complete(); - ctx.close(); - stmt.close(); - } - }; - } - - @Override - public String neo4jArrowServerAddressHeader() { - throw new UnsupportedOperationException("Not implemented for Neo4j versions <5.14"); - } - - @Override - public boolean isCompositeDatabase(GraphDatabaseService databaseService) { - var databaseManager = GraphDatabaseApiProxy.resolveDependency(databaseService, FabricDatabaseManager.class); - return databaseManager.isFabricDatabase(GraphDatabaseApiProxy.databaseId(databaseService)); - } - - @Override - public long estimateNodeCount(Read read, int label) { - return read.countsForNodeWithoutTxState(label); - } - - @Override - public long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type) { - return read.countsForRelationshipWithoutTxState(sourceLabel, type, targetLabel); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/build.gradle b/compatibility/5.8/storage-engine-adapter/build.gradle deleted file mode 100644 index a2ad8b556c..0000000000 --- a/compatibility/5.8/storage-engine-adapter/build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Storage Engine Adapter 5.8' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.8' - - compileOnly project(':annotations') - compileOnly project(':progress-tracking') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.8' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.8' - - implementation project(':core') - implementation project(':storage-engine-adapter-api') - implementation project(':config-api') - implementation project(':string-formatting') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'neo4j-kernel-api', version: ver.'neo4j' - - implementation project(':neo4j-adapter') - implementation project(':storage-engine-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.8' - - java17CompileOnly project(':annotations') - java17CompileOnly project(':progress-tracking') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.8' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.8' - - - java17Implementation project(':core') - java17Implementation project(':storage-engine-adapter-api') - java17Implementation project(':config-api') - java17Implementation project(':string-formatting') - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java b/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java deleted file mode 100644 index 19dbb9dfea..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.id.IdController; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.lock.LockService; -import org.neo4j.logging.LogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogVersionRepository; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.TransactionIdStore; -import org.neo4j.storageengine.migration.RollingUpgradeCompatibility; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccess; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.token.TokenHolders; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - @Override - public String name() { - return "unsupported58"; - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - PageCacheTracer pageCacheTracer - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(String storeVersion) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(StoreId storeId) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public RollingUpgradeCompatibility rollingUpgradeCompatibility() { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fs, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - PageCacheTracer cacheTracer, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - IdController idController, - DatabaseHealth databaseHealth, - LogProvider internalLogProvider, - LogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - PageCacheTracer cacheTracer, - boolean createStoreIfNotExists, - DatabaseReadOnlyChecker readOnlyChecker, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public List listStorageFiles(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) throws - IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout, PageCache pageCache) { - return false; - } - - @Override - public TransactionIdStore readOnlyTransactionIdStore( - FileSystemAbstraction filySystem, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public LogVersionRepository readOnlyLogVersionRepository( - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer cacheTracer, - DatabaseReadOnlyChecker readOnlyChecker - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public StoreId storeId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public void setStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - StoreId storeId, - long upgradeTxChecksum, - long upgradeTxCommitTimestamp - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public void setExternalStoreUUID( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - UUID externalStoreId - ) throws IOException { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public SchemaRuleMigrationAccess schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - LogService logService, - String recordFormats, - PageCacheTracer cacheTracer, - CursorContext cursorContext, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache - ) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public CommandReaderFactory commandReaderFactory() { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public DatabaseLayout databaseLayout(Neo4jLayout neo4jLayout, String databaseName) { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index ea12427918..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public StorageEngineProxyApi load() { - throw new UnsupportedOperationException("5.8 storage engine requires JDK17"); - } - - @Override - public String description() { - return "Storage Engine 5.8"; - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCommandCreationContextImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCommandCreationContextImpl.java deleted file mode 100644 index abf59f7199..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCommandCreationContextImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.configuration.Config; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.KernelVersionProvider; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.cursor.StoreCursors; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; - -public class InMemoryCommandCreationContextImpl implements CommandCreationContext { - - private final AtomicLong schemaTokens; - private final AtomicInteger propertyTokens; - private final AtomicInteger labelTokens; - private final AtomicInteger typeTokens; - - InMemoryCommandCreationContextImpl() { - this.schemaTokens = new AtomicLong(0); - this.propertyTokens = new AtomicInteger(0); - this.labelTokens = new AtomicInteger(0); - this.typeTokens = new AtomicInteger(0); - } - - @Override - public long reserveNode() { - throw new UnsupportedOperationException("Creating nodes is not supported"); - } - - @Override - public long reserveRelationship( - long sourceNode, - long targetNode, - int relationshipType, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - throw new UnsupportedOperationException("Creating relationships is not supported"); - } - - @Override - public long reserveSchema() { - return schemaTokens.getAndIncrement(); - } - - @Override - public int reserveLabelTokenId() { - return labelTokens.getAndIncrement(); - } - - @Override - public int reservePropertyKeyTokenId() { - return propertyTokens.getAndIncrement(); - } - - @Override - public int reserveRelationshipTypeTokenId() { - return typeTokens.getAndIncrement(); - } - - @Override - public void close() { - - } - - @Override - public void initialize( - KernelVersionProvider kernelVersionProvider, - CursorContext cursorContext, - StoreCursors storeCursors, - Supplier oldestActiveTransactionSequenceNumber, - ResourceLocker locks, - Supplier lockTracer - ) { - - } - - @Override - public KernelVersion kernelVersion() { - // NOTE: Double-check if this is still correct when you copy this into a new compat layer - return KernelVersion.getLatestVersion(Config.newBuilder().build()); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCountsStoreImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCountsStoreImpl.java deleted file mode 100644 index bc25645851..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryCountsStoreImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.documented.ReporterFactory; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.counts.CountsStorage; -import org.neo4j.counts.CountsVisitor; -import org.neo4j.gds.NodeLabel; -import org.neo4j.gds.api.GraphStore; -import org.neo4j.internal.helpers.progress.ProgressMonitorFactory; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.FileFlushEvent; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenNotFoundException; - -public class InMemoryCountsStoreImpl implements CountsStorage, CountsAccessor { - - private final GraphStore graphStore; - private final TokenHolders tokenHolders; - - public InMemoryCountsStoreImpl( - GraphStore graphStore, - TokenHolders tokenHolders - ) { - - this.graphStore = graphStore; - this.tokenHolders = tokenHolders; - } - - @Override - public void start( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - - } - - @Override - public void checkpoint(FileFlushEvent fileFlushEvent, CursorContext cursorContext) { - - } - - @Override - public long nodeCount(int labelId, CursorContext cursorContext) { - if (labelId == -1) { - return graphStore.nodeCount(); - } - - String nodeLabel; - try { - nodeLabel = tokenHolders.labelTokens().getTokenById(labelId).name(); - } catch (TokenNotFoundException e) { - throw new RuntimeException(e); - } - return graphStore.nodes().nodeCount(NodeLabel.of(nodeLabel)); - } - - @Override - public long relationshipCount(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - // TODO: this is quite wrong - return graphStore.relationshipCount(); - } - - @Override - public boolean consistencyCheck( - ReporterFactory reporterFactory, - CursorContextFactory contextFactory, - int numThreads, - ProgressMonitorFactory progressMonitorFactory - ) { - return true; - } - - @Override - public CountsAccessor.Updater apply(long txId, boolean isLast, CursorContext cursorContext) { - throw new UnsupportedOperationException("Updates are not supported"); - } - - @Override - public void close() { - - } - - @Override - public void accept(CountsVisitor visitor, CursorContext cursorContext) { - tokenHolders.labelTokens().getAllTokens().forEach(labelToken -> { - visitor.visitNodeCount(labelToken.id(), nodeCount(labelToken.id(), cursorContext)); - }); - - visitor.visitRelationshipCount(-1, -1, -1, graphStore.relationshipCount()); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryMetaDataProviderImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryMetaDataProviderImpl.java deleted file mode 100644 index c7eb156c0c..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryMetaDataProviderImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.internal.recordstorage.InMemoryLogVersionRepository58; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.ExternalStoreId; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionId; - -import java.io.IOException; -import java.util.Optional; -import java.util.UUID; - -public class InMemoryMetaDataProviderImpl implements MetadataProvider { - - private final ExternalStoreId externalStoreId; - private final InMemoryLogVersionRepository58 logVersionRepository; - private final InMemoryTransactionIdStoreImpl transactionIdStore; - - InMemoryMetaDataProviderImpl() { - this.logVersionRepository = new InMemoryLogVersionRepository58(); - this.externalStoreId = new ExternalStoreId(UUID.randomUUID()); - this.transactionIdStore = new InMemoryTransactionIdStoreImpl(); - } - - @Override - public ExternalStoreId getExternalStoreId() { - return this.externalStoreId; - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - return this.transactionIdStore.getLastClosedTransaction(); - } - - @Override - public void setCurrentLogVersion(long version) { - logVersionRepository.setCurrentLogVersion(version); - } - - @Override - public long incrementAndGetVersion() { - return logVersionRepository.incrementAndGetVersion(); - } - - @Override - public void setCheckpointLogVersion(long version) { - logVersionRepository.setCheckpointLogVersion(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return logVersionRepository.incrementAndGetCheckpointLogVersion(); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - transactionIdStore.transactionCommitted(transactionId, checksum, commitTimestamp, consensusIndex); - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - transactionIdStore.setLastCommittedAndClosedTransactionId( - transactionId, - checksum, - commitTimestamp, - consensusIndex, - byteOffset, - logVersion - ); - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.transactionClosed( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.resetLastClosedTransaction( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - public void regenerateMetadata(StoreId storeId, UUID externalStoreUUID, CursorContext cursorContext) { - } - - @Override - public StoreId getStoreId() { - return StoreId.UNKNOWN; - } - - @Override - public void close() throws IOException { - } - - @Override - public long getCurrentLogVersion() { - return this.logVersionRepository.getCurrentLogVersion(); - } - - @Override - public long getCheckpointLogVersion() { - return this.logVersionRepository.getCheckpointLogVersion(); - } - - @Override - public long nextCommittingTransactionId() { - return this.transactionIdStore.nextCommittingTransactionId(); - } - - @Override - public long committingTransactionId() { - return this.transactionIdStore.committingTransactionId(); - } - - @Override - public long getLastCommittedTransactionId() { - return this.transactionIdStore.getLastCommittedTransactionId(); - } - - @Override - public TransactionId getLastCommittedTransaction() { - return this.transactionIdStore.getLastCommittedTransaction(); - } - - @Override - public long getLastClosedTransactionId() { - return this.transactionIdStore.getLastClosedTransactionId(); - } - - @Override - public Optional getDatabaseIdUuid(CursorContext cursorTracer) { - throw new IllegalStateException("Not supported"); - } - - @Override - public void setDatabaseIdUuid(UUID uuid, CursorContext cursorContext) { - throw new IllegalStateException("Not supported"); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodeCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodeCursor.java deleted file mode 100644 index 1cb5c1a355..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodeCursor.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.api.GraphStore; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.Degrees; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodeCursor extends AbstractInMemoryNodeCursor { - - public InMemoryNodeCursor(GraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public boolean hasLabel() { - return hasAtLeastOneLabelForCurrentNode(); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor, PropertySelection selection) { - propertyCursor.initNodeProperties(propertiesReference(), selection); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor) { - properties(propertyCursor, PropertySelection.ALL_PROPERTIES); - } - - @Override - public boolean supportsFastRelationshipsTo() { - return false; - } - - @Override - public void relationshipsTo( - StorageRelationshipTraversalCursor storageRelationshipTraversalCursor, - RelationshipSelection relationshipSelection, - long neighbourNodeReference - ) { - throw new UnsupportedOperationException(); - } - - @Override - public void degrees(RelationshipSelection selection, Degrees.Mutator mutator) { - } - - @Override - public boolean scanBatch(AllNodeScan allNodeScan, long sizeHint) { - return super.scanBatch(allNodeScan, (int) sizeHint); - } - - @Override - public long[] labels() { - return longLabels(); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodePropertyCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodePropertyCursor.java deleted file mode 100644 index 079cda66b2..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryNodePropertyCursor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodePropertyCursor extends AbstractInMemoryNodePropertyCursor { - - public InMemoryNodePropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - reset(); - setId(((LongReference) reference).id); - setPropertySelection(new InMemoryPropertySelectionImpl(selection)); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertyCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertyCursor.java deleted file mode 100644 index 91f7dd25f1..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertyCursor.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.compat.AbstractInMemoryPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryPropertyCursor extends AbstractInMemoryPropertyCursor { - - public InMemoryPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(reference, selection); - } - - @Override - public void initNodeProperties(StorageNodeCursor nodeCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(nodeCursor, selection); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(relationshipCursor, selection); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(reference, selection); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertySelectionImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertySelectionImpl.java deleted file mode 100644 index 43ce0c8d48..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryPropertySelectionImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.compat.InMemoryPropertySelection; -import org.neo4j.storageengine.api.PropertySelection; - -public class InMemoryPropertySelectionImpl implements InMemoryPropertySelection { - - private final PropertySelection propertySelection; - - public InMemoryPropertySelectionImpl(PropertySelection propertySelection) {this.propertySelection = propertySelection;} - - @Override - public boolean isLimited() { - return propertySelection.isLimited(); - } - - @Override - public int numberOfKeys() { - return propertySelection.numberOfKeys(); - } - - @Override - public int key(int index) { - return propertySelection.key(index); - } - - @Override - public boolean test(int key) { - return propertySelection.test(key); - } - - @Override - public boolean isKeysOnly() { - return propertySelection.isKeysOnly(); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipPropertyCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipPropertyCursor.java deleted file mode 100644 index 4c3a5eb810..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipPropertyCursor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.storageengine.InMemoryRelationshipCursor; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipPropertyCursor extends AbstractInMemoryRelationshipPropertyCursor { - - InMemoryRelationshipPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - - } - - @Override - public void initRelationshipProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - var relationshipId = ((LongReference) reference).id; - var relationshipCursor = new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - relationshipCursor.single(relationshipId); - relationshipCursor.next(); - relationshipCursor.properties(this, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - var inMemoryRelationshipCursor = (InMemoryRelationshipCursor) relationshipCursor; - inMemoryRelationshipCursor.properties(this, selection); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipScanCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipScanCursor.java deleted file mode 100644 index 71cd9fcdc1..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipScanCursor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipScanCursor extends AbstractInMemoryRelationshipScanCursor { - - public InMemoryRelationshipScanCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - super(graphStore, tokenHolders); - } - - @Override - public void single(long reference, long sourceNodeReference, int type, long targetNodeReference) { - single(reference); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor storagePropertyCursor, PropertySelection propertySelection - ) { - properties(storagePropertyCursor, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public boolean scanBatch(AllRelationshipsScan allRelationshipsScan, long sizeHint) { - return super.scanBatch(allRelationshipsScan, (int) sizeHint); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipTraversalCursor.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipTraversalCursor.java deleted file mode 100644 index 5c82c1e02a..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryRelationshipTraversalCursor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipTraversalCursor extends AbstractInMemoryRelationshipTraversalCursor { - - public InMemoryRelationshipTraversalCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor propertyCursor, PropertySelection selection - ) { - properties(propertyCursor, new InMemoryPropertySelectionImpl(selection)); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java deleted file mode 100644 index 0e6740e443..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.eclipse.collections.api.factory.Sets; -import org.eclipse.collections.api.set.ImmutableSet; -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.consistency.checking.ConsistencyFlags; -import org.neo4j.consistency.report.ConsistencySummaryStatistics; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.function.ThrowingSupplier; -import org.neo4j.gds.annotation.SuppressForbidden; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineFactoryIdProvider; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.batchimport.AdditionalInitialIds; -import org.neo4j.internal.batchimport.BatchImporter; -import org.neo4j.internal.batchimport.Configuration; -import org.neo4j.internal.batchimport.IncrementalBatchImporter; -import org.neo4j.internal.batchimport.IndexImporterFactory; -import org.neo4j.internal.batchimport.Monitor; -import org.neo4j.internal.batchimport.ReadBehaviour; -import org.neo4j.internal.batchimport.input.Collector; -import org.neo4j.internal.batchimport.input.Input; -import org.neo4j.internal.batchimport.input.LenientStoreInput; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.id.ScanOnOpenReadOnlyIdGeneratorFactory; -import org.neo4j.internal.recordstorage.InMemoryStorageCommandReaderFactory58; -import org.neo4j.internal.recordstorage.StoreTokens; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.layout.recordstorage.RecordDatabaseLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.KernelVersionRepository; -import org.neo4j.kernel.api.index.IndexProvidersAccess; -import org.neo4j.kernel.impl.api.index.IndexProviderMap; -import org.neo4j.kernel.impl.locking.Locks; -import org.neo4j.kernel.impl.store.MetaDataStore; -import org.neo4j.kernel.impl.store.NeoStores; -import org.neo4j.kernel.impl.store.StoreFactory; -import org.neo4j.kernel.impl.store.StoreType; -import org.neo4j.kernel.impl.store.cursor.CachedStoreCursors; -import org.neo4j.kernel.impl.transaction.log.LogTailLogVersionsMetadata; -import org.neo4j.kernel.impl.transaction.log.LogTailMetadata; -import org.neo4j.lock.LockService; -import org.neo4j.logging.InternalLog; -import org.neo4j.logging.InternalLogProvider; -import org.neo4j.logging.NullLogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogFilesInitializer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.SchemaRule44; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.NamedToken; -import org.neo4j.token.api.TokenHolder; -import org.neo4j.token.api.TokensLoader; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UncheckedIOException; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.time.Clock; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - static final String IN_MEMORY_STORAGE_ENGINE_NAME = "in-memory-58"; - - public InMemoryStorageEngineFactory() { - StorageEngineProxyApi.requireNeo4jVersion(Neo4jVersion.V_5_8, StorageEngineFactory.class); - } - - @Override - public byte id() { - return StorageEngineFactoryIdProvider.ID; - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) { - return false; - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - Clock clock, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - DatabaseHealth databaseHealth, - InternalLogProvider internalLogProvider, - InternalLogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - LogTailMetadata logTailMetadata, - KernelVersionRepository kernelVersionRepository, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - idGeneratorFactory, - pageCache, - pageCacheTracer, - fs, - internalLogProvider, - contextFactory, - false, - logTailMetadata - ); - - factory.openNeoStores(StoreType.LABEL_TOKEN).close(); - - return new InMemoryStorageEngineImpl( - databaseLayout, - tokenHolders - ); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache, CursorContext cursorContext - ) { - var fieldAccess = MetaDataStore.getFieldAccess( - pageCache, - RecordDatabaseLayout.convert(databaseLayout).metadataStore(), - databaseLayout.getDatabaseName(), - cursorContext - ); - - try { - return fieldAccess.readDatabaseUUID(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fileSystemAbstraction, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - MemoryTracker memoryTracker, - PageCacheTracer pageCacheTracer, - CursorContextFactory cursorContextFactory, - boolean b - ) { - return List.of(); - } - - @Override - public DatabaseLayout databaseLayout( - Neo4jLayout neo4jLayout, String databaseName - ) { - return RecordDatabaseLayout.of(neo4jLayout, databaseName); - } - - @Override - public DatabaseLayout formatSpecificDatabaseLayout(DatabaseLayout plainLayout) { - return databaseLayout(plainLayout.getNeo4jLayout(), plainLayout.getDatabaseName()); - } - - @SuppressForbidden(reason = "This is the compat layer and we don't really need to go through the proxy") - @Override - public BatchImporter batchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCacheTracer pageCacheTracer, - Configuration configuration, - LogService logService, - PrintStream printStream, - boolean b, - AdditionalInitialIds additionalInitialIds, - Config config, - Monitor monitor, - JobScheduler jobScheduler, - Collector collector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory cursorContextFactory - ) { - throw new UnsupportedOperationException("Batch Import into GDS is not supported"); - } - - @Override - public Input asBatchImporterInput( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - MemoryTracker memoryTracker, - ReadBehaviour readBehaviour, - boolean b, - CursorContextFactory cursorContextFactory, - LogTailMetadata logTailMetadata - ) { - NeoStores neoStores = (new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - logTailMetadata - )).openAllNeoStores(); - return new LenientStoreInput( - neoStores, - readBehaviour.decorateTokenHolders(this.loadReadOnlyTokens(neoStores, true, cursorContextFactory)), - true, - cursorContextFactory, - readBehaviour - ); - } - - @Override - public long optimalAvailableConsistencyCheckerMemory( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache - ) { - return 0; - } - - @Override - public String name() { - return IN_MEMORY_STORAGE_ENGINE_NAME; - } - - @Override - public Set supportedFormats(boolean includeFormatsUnderDevelopment) { - return Set.of(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public boolean supportedFormat(String format, boolean includeFormatsUnderDevelopment) { - return format.equals(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - DatabaseReadOnlyChecker readOnlyChecker, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata, - PageCacheTracer pageCacheTracer - ) { - return new InMemoryMetaDataProviderImpl(); - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - CursorContextFactory cursorContextFactory - ) { - return new InMemoryVersionCheck(); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - boolean b, - Function function, - CursorContextFactory cursorContextFactory - ) { - return List.of(); - } - - @Override - public List load44SchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata - ) { - return List.of(); - } - - @Override - public TokenHolders loadReadOnlyTokens( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - boolean lenient, - CursorContextFactory cursorContextFactory - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - LogTailMetadata.EMPTY_LOG_TAIL - ); - try ( NeoStores stores = factory.openNeoStores( - StoreType.PROPERTY_KEY_TOKEN, StoreType.PROPERTY_KEY_TOKEN_NAME, - StoreType.LABEL_TOKEN, StoreType.LABEL_TOKEN_NAME, - StoreType.RELATIONSHIP_TYPE_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN_NAME ) ) - { - return loadReadOnlyTokens(stores, lenient, cursorContextFactory); - } - } - - private TokenHolders loadReadOnlyTokens( - NeoStores stores, - boolean lenient, - CursorContextFactory cursorContextFactory - ) - { - try ( var cursorContext = cursorContextFactory.create("loadReadOnlyTokens"); - var storeCursors = new CachedStoreCursors( stores, cursorContext ) ) - { - stores.start( cursorContext ); - TokensLoader loader = lenient ? StoreTokens.allReadableTokens( stores ) : StoreTokens.allTokens( stores ); - TokenHolder propertyKeys = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_PROPERTY_KEY ); - TokenHolder labels = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_LABEL ); - TokenHolder relationshipTypes = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_RELATIONSHIP_TYPE ); - - propertyKeys.setInitialTokens( lenient ? unique( loader.getPropertyKeyTokens( storeCursors ) ) : loader.getPropertyKeyTokens( storeCursors ) ); - labels.setInitialTokens( lenient ? unique( loader.getLabelTokens( storeCursors ) ) : loader.getLabelTokens( storeCursors ) ); - relationshipTypes.setInitialTokens( - lenient ? unique( loader.getRelationshipTypeTokens( storeCursors ) ) : loader.getRelationshipTypeTokens( storeCursors ) ); - return new TokenHolders( propertyKeys, labels, relationshipTypes ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - - private static List unique( List tokens ) - { - if ( !tokens.isEmpty() ) - { - Set names = new HashSet<>( tokens.size() ); - int i = 0; - while ( i < tokens.size() ) - { - if ( names.add( tokens.get( i ).name() ) ) - { - i++; - } - else - { - // Remove the token at the given index, by replacing it with the last token in the list. - // This changes the order of elements, but can be done in constant time instead of linear time. - int lastIndex = tokens.size() - 1; - NamedToken endToken = tokens.remove( lastIndex ); - if ( i < lastIndex ) - { - tokens.set( i, endToken ); - } - } - } - } - return tokens; - } - - @Override - public CommandReaderFactory commandReaderFactory() { - return InMemoryStorageCommandReaderFactory58.INSTANCE; - } - - @Override - public void consistencyCheck( - FileSystemAbstraction fileSystem, - DatabaseLayout layout, - Config config, - PageCache pageCache, - IndexProviderMap indexProviders, - InternalLog log, - ConsistencySummaryStatistics summary, - int numberOfThreads, - long maxOffHeapCachingMemory, - OutputStream progressOutput, - boolean verbose, - ConsistencyFlags flags, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer, - LogTailMetadata logTailMetadata - ) { - // we can do no-op, since our "database" is _always_ consistent - } - - @Override - public ImmutableSet getStoreOpenOptions( - FileSystemAbstraction fs, - PageCache pageCache, - DatabaseLayout layout, - CursorContextFactory contextFactory - ) { - // Not sure about this, empty set is returned when the store files are in `little-endian` format - // See: `org.neo4j.kernel.impl.store.format.PageCacheOptionsSelector.select` - return Sets.immutable.empty(); - } - - @Override - public StoreId retrieveStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - return StoreId.retrieveFromStore(fs, databaseLayout, pageCache, cursorContext); - } - - - @Override - public Optional versionInformation(StoreVersionIdentifier storeVersionIdentifier) { - return Optional.of(new InMemoryStoreVersion()); - } - - @Override - public void resetMetadata( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - CursorContextFactory cursorContextFactory, - PageCacheTracer pageCacheTracer, - StoreId storeId, - UUID externalStoreId - ) { - throw new UnsupportedOperationException(); - } - - @Override - public IncrementalBatchImporter incrementalBatchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystem, - PageCacheTracer pageCacheTracer, - Configuration config, - LogService logService, - PrintStream progressOutput, - boolean verboseProgressOutput, - AdditionalInitialIds additionalInitialIds, - ThrowingSupplier logTailMetadataSupplier, - Config dbConfig, - Monitor monitor, - JobScheduler jobScheduler, - Collector badCollector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - IndexProvidersAccess indexProvidersAccess - ) { - throw new UnsupportedOperationException(); - } - - @Override - public Locks createLocks(Config config, SystemNanoClock clock) { - return Locks.NO_LOCKS; - } - - @Override - public List listStorageFiles( - FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout - ) { - return Collections.emptyList(); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache - ) { - return StorageFilesState.recoveredState(); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineImpl.java deleted file mode 100644 index b2537382ae..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageEngineImpl.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.counts.CountsAccessor; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.TokenManager; -import org.neo4j.gds.config.GraphProjectConfig; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.core.loading.GraphStoreCatalog; -import org.neo4j.gds.storageengine.InMemoryDatabaseCreationCatalog; -import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor; -import org.neo4j.internal.diagnostics.DiagnosticsLogger; -import org.neo4j.internal.recordstorage.InMemoryStorageReader58; -import org.neo4j.internal.schema.StorageEngineIndexingBehaviour; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.DatabaseFlushEvent; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; -import org.neo4j.kernel.lifecycle.Lifecycle; -import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.lock.LockGroup; -import org.neo4j.lock.LockService; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.logging.InternalLog; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.CommandBatchToApply; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.CommandStream; -import org.neo4j.storageengine.api.IndexUpdateListener; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageCommand; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StoreFileMetadata; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionApplicationMode; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.storageengine.api.enrichment.Enrichment; -import org.neo4j.storageengine.api.enrichment.EnrichmentCommand; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; -import org.neo4j.storageengine.api.txstate.TxStateVisitor; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static org.neo4j.gds.utils.StringFormatting.formatWithLocale; - -public final class InMemoryStorageEngineImpl implements StorageEngine { - - private final MetadataProvider metadataProvider; - private final CypherGraphStore graphStore; - private final DatabaseLayout databaseLayout; - private final InMemoryTransactionStateVisitor txStateVisitor; - - private final CommandCreationContext commandCreationContext; - - private final TokenManager tokenManager; - private final InMemoryCountsStoreImpl countsStore; - - private static final StorageEngineIndexingBehaviour INDEXING_BEHAVIOUR = new StorageEngineIndexingBehaviour() { - @Override - public boolean useNodeIdsInRelationshipTokenIndex() { - return false; - } - - @Override - public boolean requireCoordinationLocks() { - return false; - } - - @Override - public int nodesPerPage() { - return 0; - } - - @Override - public int relationshipsPerPage() { - return 0; - } - }; - - InMemoryStorageEngineImpl( - DatabaseLayout databaseLayout, - TokenHolders tokenHolders - ) { - this.databaseLayout = databaseLayout; - this.graphStore = getGraphStoreFromCatalog(databaseLayout.getDatabaseName()); - this.txStateVisitor = new InMemoryTransactionStateVisitor(graphStore, tokenHolders, false); - this.commandCreationContext = new InMemoryCommandCreationContextImpl(); - this.tokenManager = new TokenManager( - tokenHolders, - InMemoryStorageEngineImpl.this.txStateVisitor, - InMemoryStorageEngineImpl.this.graphStore, - commandCreationContext - ); - InMemoryStorageEngineImpl.this.graphStore.initialize(tokenHolders); - this.countsStore = new InMemoryCountsStoreImpl(graphStore, tokenHolders); - this.metadataProvider = new InMemoryMetaDataProviderImpl(); - } - - private static CypherGraphStore getGraphStoreFromCatalog(String databaseName) { - var graphName = InMemoryDatabaseCreationCatalog.getRegisteredDbCreationGraphName(databaseName); - return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores() - .filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig - .config() - .graphName() - .equals(graphName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(formatWithLocale( - "No graph with name `%s` was found in GraphStoreCatalog. Available graph names are %s", - graphName, - GraphStoreCatalog.getAllGraphStores() - .map(GraphStoreCatalog.GraphStoreWithUserNameAndConfig::config) - .map(GraphProjectConfig::graphName) - .collect(Collectors.toList()) - ))) - .graphStore(); - } - - @Override - public StoreEntityCounters storeEntityCounters() { - return new StoreEntityCounters() { - @Override - public long nodes() { - return graphStore.nodeCount(); - } - - @Override - public long relationships() { - return graphStore.relationshipCount(); - } - - @Override - public long properties() { - return graphStore.nodePropertyKeys().size() + graphStore.relationshipPropertyKeys().size(); - } - - @Override - public long relationshipTypes() { - return graphStore.relationshipTypes().size(); - } - - @Override - public long allNodesCountStore(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public long allRelationshipsCountStore(CursorContext cursorContext) { - return graphStore.relationshipCount(); - } - }; - } - - @Override - public void preAllocateStoreFilesForCommands( - CommandBatchToApply commandBatchToApply, - TransactionApplicationMode transactionApplicationMode - ) { - } - - @Override - public StoreCursors createStorageCursors(CursorContext initialContext) { - return StoreCursors.NULL; - } - - @Override - public StorageLocks createStorageLocks(ResourceLocker locker) { - return new InMemoryStorageLocksImpl(locker); - } - - @Override - public List createCommands( - ReadableTransactionState state, - StorageReader storageReader, - CommandCreationContext creationContext, - LockTracer lockTracer, - TxStateVisitor.Decorator additionalTxStateVisitor, - CursorContext cursorContext, - StoreCursors storeCursors, - MemoryTracker memoryTracker - ) throws KernelException { - state.accept(txStateVisitor); - return List.of(); - } - - @Override - public void dumpDiagnostics(InternalLog internalLog, DiagnosticsLogger diagnosticsLogger) { - } - - @Override - public List createUpgradeCommands( - KernelVersion versionToUpgradeFrom, - KernelVersion versionToUpgradeTo - ) { - return List.of(); - } - - @Override - public EnrichmentCommand createEnrichmentCommand(KernelVersion kernelVersion, Enrichment enrichment) { - throw new UnsupportedOperationException(); - } - - @Override - public StoreId retrieveStoreId() { - return metadataProvider.getStoreId(); - } - - @Override - public StorageEngineIndexingBehaviour indexingBehaviour() { - return INDEXING_BEHAVIOUR; - } - - @Override - public StorageReader newReader() { - return new InMemoryStorageReader58(graphStore, tokenManager.tokenHolders(), countsStore); - } - - @Override - public void addIndexUpdateListener(IndexUpdateListener listener) { - - } - - @Override - public void apply(CommandBatchToApply batch, TransactionApplicationMode mode) { - } - - @Override - public void init() { - } - - @Override - public void start() { - - } - - @Override - public void stop() { - shutdown(); - } - - @Override - public void shutdown() { - InMemoryDatabaseCreationCatalog.removeDatabaseEntry(databaseLayout.getDatabaseName()); - } - - @Override - public void listStorageFiles( - Collection atomic, Collection replayable - ) { - - } - - @Override - public Lifecycle schemaAndTokensLifecycle() { - return new LifecycleAdapter() { - @Override - public void init() { - - } - }; - } - - @Override - public CountsAccessor countsAccessor() { - return countsStore; - } - - @Override - public MetadataProvider metadataProvider() { - return metadataProvider; - } - - @Override - public CommandCreationContext newCommandCreationContext() { - return commandCreationContext; - } - - @Override - public void lockRecoveryCommands( - CommandStream commands, LockService lockService, LockGroup lockGroup, TransactionApplicationMode mode - ) { - - } - - @Override - public void rollback(ReadableTransactionState txState, CursorContext cursorContext) { - // rollback is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - // TODO: do we want to inspect the txState to infer if rollback was called explicitly or not? - } - - @Override - public void checkpoint(DatabaseFlushEvent flushEvent, CursorContext cursorContext) { - // checkpoint is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageLocksImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageLocksImpl.java deleted file mode 100644 index 8ef6bfc8b5..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStorageLocksImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; - -public class InMemoryStorageLocksImpl implements StorageLocks { - - InMemoryStorageLocksImpl(ResourceLocker locker) {} - - @Override - public void acquireExclusiveNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveNodeLock(long... ids) {} - - @Override - public void acquireSharedNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedNodeLock(long... ids) {} - - @Override - public void acquireExclusiveRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveRelationshipLock(long... ids) {} - - @Override - public void acquireSharedRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedRelationshipLock(long... ids) {} - - @Override - public void acquireRelationshipCreationLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireRelationshipDeletionLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - long relationship, - boolean relationshipAddedInTx, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireNodeDeletionLock( - ReadableTransactionState readableTransactionState, - LockTracer lockTracer, - long node - ) {} - - @Override - public void acquireNodeLabelChangeLock(LockTracer lockTracer, long node, int labelId) {} -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStoreVersion.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStoreVersion.java deleted file mode 100644 index 37e1f46f25..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryStoreVersion.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.format.Capability; -import org.neo4j.storageengine.api.format.CapabilityType; - -import java.util.Optional; - -public class InMemoryStoreVersion implements StoreVersion { - - public static final String STORE_VERSION = "gds-experimental"; - - @Override - public String getStoreVersionUserString() { - return "Unknown"; - } - - @Override - public Optional successorStoreVersion() { - return Optional.empty(); - } - - @Override - public String formatName() { - return getClass().getSimpleName(); - } - - @Override - public boolean onlyForMigration() { - return false; - } - - @Override - public boolean hasCapability(Capability capability) { - return false; - } - - @Override - public boolean hasCompatibleCapabilities( - StoreVersion otherVersion, CapabilityType type - ) { - return false; - } - - @Override - public String introductionNeo4jVersion() { - return "foo"; - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryTransactionIdStoreImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryTransactionIdStoreImpl.java deleted file mode 100644 index b607e28637..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryTransactionIdStoreImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.internal.recordstorage.AbstractTransactionIdStore; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.kernel.impl.transaction.log.LogPosition; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.TransactionId; -import org.neo4j.storageengine.api.TransactionIdStore; - -public class InMemoryTransactionIdStoreImpl extends AbstractTransactionIdStore { - - @Override - protected void initLastCommittedAndClosedTransactionId( - long previouslyCommittedTxId, - int checksum, - long previouslyCommittedTxCommitTimestamp, - long previouslyCommittedTxLogByteOffset, - long previouslyCommittedTxLogVersion - ) { - this.setLastCommittedAndClosedTransactionId( - previouslyCommittedTxId, - checksum, - previouslyCommittedTxCommitTimestamp, - TransactionIdStore.UNKNOWN_CONSENSUS_INDEX, - previouslyCommittedTxLogByteOffset, - previouslyCommittedTxLogVersion - ); - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - long[] metaData = this.closedTransactionId.get(); - return new ClosedTransactionMetadata( - metaData[0], - new LogPosition(metaData[1], metaData[2]), - (int) metaData[3], - metaData[4], - metaData[5] - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - protected TransactionId transactionId(long transactionId, int checksum, long commitTimestamp) { - return new TransactionId(transactionId, checksum, commitTimestamp, TransactionIdStore.UNKNOWN_CONSENSUS_INDEX); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.offer( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.set( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryVersionCheck.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryVersionCheck.java deleted file mode 100644 index 187731326b..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/InMemoryVersionCheck.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.impl.store.format.FormatFamily; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; - -import static org.neo4j.gds.compat._58.InMemoryStoreVersion.STORE_VERSION; - -public class InMemoryVersionCheck implements StoreVersionCheck { - - private static final StoreVersionIdentifier STORE_IDENTIFIER = new StoreVersionIdentifier( - STORE_VERSION, - FormatFamily.STANDARD.name(), - 0, - 0 - ); - - @Override - public boolean isCurrentStoreVersionFullySupported(CursorContext cursorContext) { - return true; - } - - @Override - public MigrationCheckResult getAndCheckMigrationTargetVersion(String formatFamily, CursorContext cursorContext) { - return new StoreVersionCheck.MigrationCheckResult(MigrationOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public UpgradeCheckResult getAndCheckUpgradeTargetVersion(CursorContext cursorContext) { - return new StoreVersionCheck.UpgradeCheckResult(UpgradeOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public String getIntroductionVersionFromVersion(StoreVersionIdentifier storeVersionIdentifier) { - return STORE_VERSION; - } - - public StoreVersionIdentifier findLatestVersion(String s) { - return STORE_IDENTIFIER; - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index c8f0a8393b..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_8; - } - - @Override - public StorageEngineProxyApi load() { - return new StorageEngineProxyImpl(); - } - - @Override - public String description() { - return "Storage Engine 5.8"; - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyImpl.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyImpl.java deleted file mode 100644 index f60816b102..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_58/StorageEngineProxyImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._58; - -import org.neo4j.common.Edition; -import org.neo4j.configuration.Config; -import org.neo4j.configuration.GraphDatabaseInternalSettings; -import org.neo4j.dbms.api.DatabaseManagementService; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.compat.GdsDatabaseManagementServiceBuilder; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEntityCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenHolder; - -import static org.neo4j.configuration.GraphDatabaseSettings.db_format; - -public class StorageEngineProxyImpl implements StorageEngineProxyApi { - - @Override - public void initRelationshipTraversalCursorForRelType( - StorageRelationshipTraversalCursor cursor, - long sourceNodeId, - int relTypeToken - ) { - var relationshipSelection = RelationshipSelection.selection( - relTypeToken, - Direction.OUTGOING - ); - cursor.init(sourceNodeId, -1, relationshipSelection); - } - - @Override - public StorageEngine createInMemoryStorageEngine(DatabaseLayout databaseLayout, TokenHolders tokenHolders) { - return new InMemoryStorageEngineImpl(databaseLayout, tokenHolders); - } - - @Override - public void createInMemoryDatabase( - DatabaseManagementService dbms, - String dbName, - Config config - ) { - config.set(db_format, InMemoryStorageEngineFactory.IN_MEMORY_STORAGE_ENGINE_NAME); - dbms.createDatabase(dbName, config); - } - - @Override - public GraphDatabaseService startAndGetInMemoryDatabase(DatabaseManagementService dbms, String dbName) { - dbms.startDatabase(dbName); - return dbms.database(dbName); - } - - @Override - public GdsDatabaseManagementServiceBuilder setSkipDefaultIndexesOnCreationSetting(GdsDatabaseManagementServiceBuilder dbmsBuilder) { - return dbmsBuilder.setConfig(GraphDatabaseInternalSettings.skip_default_indexes_on_creation, true); - } - - @Override - public AbstractInMemoryNodeCursor inMemoryNodeCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryNodePropertyCursor inMemoryNodePropertyCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - return new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipTraversalCursor inMemoryRelationshipTraversalCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipScanCursor inMemoryRelationshipScanCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipPropertyCursor inMemoryRelationshipPropertyCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - @Override - public void properties( - StorageEntityCursor storageCursor, StoragePropertyCursor propertyCursor, int[] propertySelection - ) { - PropertySelection selection; - if (propertySelection.length == 0) { - selection = PropertySelection.ALL_PROPERTIES; - } else { - selection = PropertySelection.selection(propertySelection); - } - storageCursor.properties(propertyCursor, selection); - } - - @Override - public Edition dbmsEdition(GraphDatabaseService databaseService) { - return GraphDatabaseApiProxy.dbmsInfo(databaseService).edition; - } - - @Override - public TokenHolders newTokenHolders() { - return new TokenHolders( - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE) - ); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository58.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository58.java deleted file mode 100644 index e495c490b5..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository58.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.storageengine.api.LogVersionRepository; - -import java.util.concurrent.atomic.AtomicLong; - -public class InMemoryLogVersionRepository58 implements LogVersionRepository { - - private final AtomicLong logVersion; - private final AtomicLong checkpointLogVersion; - - public InMemoryLogVersionRepository58() { - this(0, 0); - } - - private InMemoryLogVersionRepository58(long initialLogVersion, long initialCheckpointLogVersion) { - this.logVersion = new AtomicLong(); - this.checkpointLogVersion = new AtomicLong(); - this.logVersion.set(initialLogVersion); - this.checkpointLogVersion.set(initialCheckpointLogVersion); - } - - @Override - public void setCurrentLogVersion(long version) { - this.logVersion.set(version); - } - - @Override - public long incrementAndGetVersion() { - return this.logVersion.incrementAndGet(); - } - - @Override - public void setCheckpointLogVersion(long version) { - this.checkpointLogVersion.set(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return this.checkpointLogVersion.incrementAndGet(); - } - - @Override - public long getCurrentLogVersion() { - return this.logVersion.get(); - } - - @Override - public long getCheckpointLogVersion() { - return this.checkpointLogVersion.get(); - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory58.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory58.java deleted file mode 100644 index 5b457388c1..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory58.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.kernel.KernelVersion; -import org.neo4j.storageengine.api.CommandReader; -import org.neo4j.storageengine.api.CommandReaderFactory; - -public class InMemoryStorageCommandReaderFactory58 implements CommandReaderFactory { - - public static final CommandReaderFactory INSTANCE = new InMemoryStorageCommandReaderFactory58(); - - @Override - public CommandReader get(KernelVersion kernelVersion) { - switch (kernelVersion) { - case V4_2: - return LogCommandSerializationV4_2.INSTANCE; - case V4_3_D4: - return LogCommandSerializationV4_3_D3.INSTANCE; - case V5_0: - return LogCommandSerializationV5_0.INSTANCE; - default: - throw new IllegalArgumentException("Unsupported kernel version " + kernelVersion); - } - } -} diff --git a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader58.java b/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader58.java deleted file mode 100644 index afea47a04d..0000000000 --- a/compatibility/5.8/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader58.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.eclipse.collections.api.set.primitive.IntSet; -import org.eclipse.collections.impl.set.immutable.primitive.ImmutableIntSetFactoryImpl; -import org.neo4j.common.EntityType; -import org.neo4j.common.TokenNameLookup; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.gds.compat._58.InMemoryNodeCursor; -import org.neo4j.gds.compat._58.InMemoryPropertyCursor; -import org.neo4j.gds.compat._58.InMemoryRelationshipScanCursor; -import org.neo4j.gds.compat._58.InMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.schema.ConstraintDescriptor; -import org.neo4j.internal.schema.IndexDescriptor; -import org.neo4j.internal.schema.IndexType; -import org.neo4j.internal.schema.SchemaDescriptor; -import org.neo4j.internal.schema.constraints.IndexBackedConstraintDescriptor; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StorageRelationshipScanCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.storageengine.api.StorageSchemaReader; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -public class InMemoryStorageReader58 implements StorageReader { - - protected final CypherGraphStore graphStore; - protected final TokenHolders tokenHolders; - protected final CountsAccessor counts; - private final Map, Object> dependantState; - private boolean closed; - - public InMemoryStorageReader58( - CypherGraphStore graphStore, - TokenHolders tokenHolders, - CountsAccessor counts - ) { - this.graphStore = graphStore; - - this.tokenHolders = tokenHolders; - this.counts = counts; - this.dependantState = new ConcurrentHashMap<>(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] changedLabels, - long[] unchangedLabels, - int[] propertyKeyIds, - boolean propertyKeyListIsComplete, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public long relationshipsGetCount(CursorContext cursorTracer) { - return graphStore.relationshipCount(); - } - - @Override - public boolean nodeExists(long id, StoreCursors storeCursors) { - var originalId = graphStore.nodes().toOriginalNodeId(id); - return graphStore.nodes().containsOriginalId(originalId); - } - - @Override - public boolean relationshipExists(long id, StoreCursors storeCursors) { - return true; - } - - @Override - public StorageNodeCursor allocateNodeCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public StoragePropertyCursor allocatePropertyCursor( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - return new InMemoryPropertyCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipTraversalCursor allocateRelationshipTraversalCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipScanCursor allocateRelationshipScanCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public IndexDescriptor indexGetForSchemaAndType( - SchemaDescriptor descriptor, IndexType type - ) { - return null; - } - - @Override - public AllRelationshipsScan allRelationshipScan() { - return new AbstractInMemoryAllRelationshipScan() { - @Override - boolean scanRange(AbstractInMemoryRelationshipScanCursor cursor, long start, long stopInclusive) { - return cursor.scanRange(start, stopInclusive); - } - - @Override - public boolean scanBatch(long sizeHint, AbstractInMemoryRelationshipScanCursor cursor) { - return super.scanBatch(sizeHint, cursor); - } - }; - } - - @Override - public Iterator indexGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForRelationshipType(int relationshipType) { - return Collections.emptyIterator(); - } - - @Override - public IndexDescriptor indexGetForName(String name) { - return null; - } - - @Override - public ConstraintDescriptor constraintGetForName(String name) { - return null; - } - - @Override - public boolean indexExists(IndexDescriptor index) { - return false; - } - - @Override - public Iterator indexesGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int propertyKeyId, EntityType entityType - ) { - return valueIndexesGetRelated(tokens, new int[]{propertyKeyId}, entityType); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int[] propertyKeyIds, EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] labels, - int propertyKeyId, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] tokens, - int[] propertyKeyIds, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public boolean hasRelatedSchema(long[] labels, int propertyKey, EntityType entityType) { - return false; - } - - @Override - public boolean hasRelatedSchema(int label, EntityType entityType) { - return false; - } - - @Override - public Iterator constraintsGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public boolean constraintExists(ConstraintDescriptor descriptor) { - return false; - } - - @Override - public Iterator constraintsGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetForRelationshipType(int typeId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetAll() { - return Collections.emptyIterator(); - } - - @Override - public IntSet constraintsGetPropertyTokensForLogicalKey(int token, EntityType entityType) { - return ImmutableIntSetFactoryImpl.INSTANCE.empty(); - } - - @Override - public Long indexGetOwningUniquenessConstraintId(IndexDescriptor index) { - return null; - } - - @Override - public long countsForNode(int labelId, CursorContext cursorContext) { - return counts.nodeCount(labelId, cursorContext); - } - - @Override - public long countsForRelationship(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - return counts.relationshipCount(startLabelId, typeId, endLabelId, cursorContext); - } - - @Override - public long nodesGetCount(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public int labelCount() { - return graphStore.nodes().availableNodeLabels().size(); - } - - @Override - public int propertyKeyCount() { - int nodePropertyCount = graphStore - .schema() - .nodeSchema() - .allProperties() - .size(); - int relPropertyCount = graphStore - .schema() - .relationshipSchema() - .allProperties() - .size(); - return nodePropertyCount + relPropertyCount; - } - - @Override - public int relationshipTypeCount() { - return graphStore.schema().relationshipSchema().availableTypes().size(); - } - - @Override - public T getOrCreateSchemaDependantState(Class type, Function factory) { - return type.cast(dependantState.computeIfAbsent(type, key -> factory.apply(this))); - } - - @Override - public AllNodeScan allNodeScan() { - return new InMemoryNodeScan(); - } - - @Override - public void close() { - assert !closed; - closed = true; - } - - @Override - public StorageSchemaReader schemaSnapshot() { - return this; - } - - @Override - public TokenNameLookup tokenNameLookup() { - return tokenHolders; - } - -} diff --git a/compatibility/5.9/neo4j-kernel-adapter/build.gradle b/compatibility/5.9/neo4j-kernel-adapter/build.gradle deleted file mode 100644 index 7096eaf0f7..0000000000 --- a/compatibility/5.9/neo4j-kernel-adapter/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Neo4j Kernel Adapter 5.9' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.9' - - compileOnly project(':annotations') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'annotations', version: neos.'5.9' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.9' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.9' - compileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.9' - - implementation project(':neo4j-kernel-adapter-api') - implementation project(':neo4j-kernel-adapter-5-common') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - compileOnly project(':annotations') - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - - implementation project(':neo4j-kernel-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.9' - - java17CompileOnly project(':annotations') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.9' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.9' - java17CompileOnly group: 'org.neo4j.community', name: 'it-test-support', version: neos.'5.9' - - java17Implementation project(':neo4j-kernel-adapter-api') - java17Implementation project(':neo4j-kernel-adapter-5-common') - } -} diff --git a/compatibility/5.9/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java b/compatibility/5.9/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 1fbbce23a9..0000000000 --- a/compatibility/5.9/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public Neo4jProxyApi load() { - throw new UnsupportedOperationException("RC compatibility requires JDK17"); - } - - @Override - public String description() { - return "Neo4j 5.9 (placeholder)"; - } -} diff --git a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/BoltTransactionRunnerImpl.java b/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/BoltTransactionRunnerImpl.java deleted file mode 100644 index 479f8dbf17..0000000000 --- a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/BoltTransactionRunnerImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.bolt.dbapi.BoltGraphDatabaseServiceSPI; -import org.neo4j.bolt.dbapi.BoltTransaction; -import org.neo4j.bolt.protocol.common.message.AccessMode; -import org.neo4j.bolt.protocol.common.message.request.connection.RoutingContext; -import org.neo4j.bolt.tx.statement.StatementQuerySubscriber; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.BoltQuerySubscriber; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.graphdb.QueryStatistics; -import org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo; -import org.neo4j.internal.kernel.api.security.LoginContext; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.impl.query.QueryExecutionConfiguration; -import org.neo4j.kernel.impl.query.QueryExecutionKernelException; -import org.neo4j.values.virtual.MapValue; - -import java.time.Duration; -import java.util.List; -import java.util.Map; - -public class BoltTransactionRunnerImpl extends BoltTransactionRunner { - - @Override - protected BoltQuerySubscriber boltQuerySubscriber() { - var subscriber = new StatementQuerySubscriber(); - return new BoltQuerySubscriber<>() { - @Override - public void assertSucceeded() throws KernelException { - subscriber.assertSuccess(); - } - - @Override - public QueryStatistics queryStatistics() { - return subscriber.getStatistics(); - } - - @Override - public StatementQuerySubscriber innerSubscriber() { - return subscriber; - } - }; - } - - @Override - protected void executeQuery( - BoltTransaction boltTransaction, - String query, - MapValue parameters, - StatementQuerySubscriber querySubscriber - ) throws QueryExecutionKernelException { - boltTransaction.executeQuery(query, parameters, true, querySubscriber); - } - - @Override - protected BoltTransaction beginBoltWriteTransaction( - BoltGraphDatabaseServiceSPI fabricDb, - LoginContext loginContext, - KernelTransaction.Type kernelTransactionType, - ClientConnectionInfo clientConnectionInfo, - List bookmarks, - Duration txTimeout, - Map txMetadata - ) { - return fabricDb.beginTransaction( - kernelTransactionType, - loginContext, - clientConnectionInfo, - bookmarks, - txTimeout, - AccessMode.WRITE, - txMetadata, - new RoutingContext(true, Map.of()), - QueryExecutionConfiguration.DEFAULT_CONFIG - ); - } -} diff --git a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java b/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java deleted file mode 100644 index 25ad1de6d4..0000000000 --- a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jProxyApi; -import org.neo4j.gds.compat.Neo4jProxyFactory; -import org.neo4j.gds.compat.Neo4jVersion; - -@ServiceProvider -public final class Neo4jProxyFactoryImpl implements Neo4jProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_9; - } - - @Override - public Neo4jProxyApi load() { - return new Neo4jProxyImpl(); - } - - @Override - public String description() { - return "Neo4j 5.9"; - } -} diff --git a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyImpl.java b/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyImpl.java deleted file mode 100644 index 247ebf927d..0000000000 --- a/compatibility/5.9/neo4j-kernel-adapter/src/main/java17/org/neo4j/gds/compat/_59/Neo4jProxyImpl.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.common.DependencyResolver; -import org.neo4j.gds.compat.BoltTransactionRunner; -import org.neo4j.gds.compat.CompatExecutionContext; -import org.neo4j.gds.compat.GlobalProcedureRegistry; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat._5x.CommonNeo4jProxyImpl; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.kernel.api.Cursor; -import org.neo4j.internal.kernel.api.PartitionedScan; -import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.procs.FieldSignature; -import org.neo4j.internal.kernel.api.procs.ProcedureSignature; -import org.neo4j.internal.kernel.api.procs.QualifiedName; -import org.neo4j.internal.kernel.api.procs.UserFunctionSignature; -import org.neo4j.internal.kernel.api.security.AccessMode; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.context.EmptyVersionContextSupplier; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.api.KernelTransaction; -import org.neo4j.kernel.api.procedure.Context; -import org.neo4j.kernel.api.procedure.GlobalProcedures; -import org.neo4j.kernel.database.DatabaseReference; -import org.neo4j.kernel.database.DatabaseReferenceRepository; -import org.neo4j.kernel.impl.store.RecordStore; -import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.procedure.Mode; - -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Stream; - -public final class Neo4jProxyImpl extends CommonNeo4jProxyImpl { - - @Override - public long getHighId(RecordStore recordStore) { - return recordStore.getIdGenerator().getHighId(); - } - - @Override - public T lookupComponentProvider(Context ctx, Class component, boolean safe) throws ProcedureException { - var globalProcedures = GraphDatabaseApiProxy.resolveDependency( - ctx.dependencyResolver(), - GlobalProcedures.class - ); - return globalProcedures.getCurrentView().lookupComponentProvider(component, safe).apply(ctx); - } - - @Override - public BoltTransactionRunner boltTransactionRunner() { - return new BoltTransactionRunnerImpl(); - } - - @Override - public ProcedureSignature procedureSignature( - QualifiedName name, - List inputSignature, - List outputSignature, - Mode mode, - boolean admin, - String deprecated, - String description, - String warning, - boolean eager, - boolean caseInsensitive, - boolean systemProcedure, - boolean internal, - boolean allowExpiredCredentials, - boolean threadSafe - ) { - return new ProcedureSignature( - name, - inputSignature, - outputSignature, - mode, - admin, - deprecated, - description, - warning, - eager, - caseInsensitive, - systemProcedure, - internal, - allowExpiredCredentials - ); - } - - @Override - public GlobalProcedureRegistry globalProcedureRegistry(GlobalProcedures globalProcedures) { - return new GlobalProcedureRegistry() { - @Override - public Set getAllProcedures() { - return globalProcedures.getAllProcedures(); - } - - @Override - public Stream getAllNonAggregatingFunctions() { - return globalProcedures.getAllNonAggregatingFunctions(); - } - - @Override - public Stream getAllAggregatingFunctions() { - return globalProcedures.getAllAggregatingFunctions(); - } - }; - } - - private static final DependencyResolver EMPTY_DEPENDENCY_RESOLVER = new DependencyResolver.Adapter() { - @Override - public T resolveDependency(Class type, SelectionStrategy selector) { - return null; - } - - @Override - public boolean containsDependency(Class type) { - return false; - } - }; - - @Override - public DependencyResolver emptyDependencyResolver() { - return EMPTY_DEPENDENCY_RESOLVER; - } - - @Override - public CursorContextFactory cursorContextFactory(Optional pageCacheTracer) { - return pageCacheTracer.map(cacheTracer -> new CursorContextFactory( - cacheTracer, - EmptyVersionContextSupplier.EMPTY - )).orElse(CursorContextFactory.NULL_CONTEXT_FACTORY); - } - - @Override - public CompatExecutionContext executionContext(KernelTransaction ktx) { - var stmt = ktx.acquireStatement(); - var ctx = ktx.createExecutionContext(); - return new CompatExecutionContext() { - @Override - public CursorContext cursorContext() { - return ctx.cursorContext(); - } - - @Override - public AccessMode accessMode() { - return ctx.securityContext().mode(); - } - - @Override - public boolean reservePartition(PartitionedScan scan, C cursor) { - return scan.reservePartition(cursor, ctx); - } - - @Override - public void close() { - ctx.complete(); - ctx.close(); - stmt.close(); - } - }; - } - - @Override - public String neo4jArrowServerAddressHeader() { - throw new UnsupportedOperationException("Not implemented for Neo4j versions <5.14"); - } - - @Override - public boolean isCompositeDatabase(GraphDatabaseService databaseService) { - var databaseId = GraphDatabaseApiProxy.databaseId(databaseService); - var repo = GraphDatabaseApiProxy.resolveDependency(databaseService, DatabaseReferenceRepository.class); - return repo.getCompositeDatabaseReferences().stream() - .map(DatabaseReference.Internal::databaseId) - .anyMatch(databaseId::equals); - } - - @Override - public long estimateNodeCount(Read read, int label) { - return read.countsForNodeWithoutTxState(label); - } - - @Override - public long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type) { - return read.countsForRelationshipWithoutTxState(sourceLabel, type, targetLabel); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/build.gradle b/compatibility/5.9/storage-engine-adapter/build.gradle deleted file mode 100644 index 579726bc9a..0000000000 --- a/compatibility/5.9/storage-engine-adapter/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'me.champeau.mrjar' - -description = 'Neo4j Graph Data Science :: Storage Engine Adapter 5.9' - -group = 'org.neo4j.gds' - -// for all 5.x versions -if (ver.'neo4j'.startsWith('5.')) { - sourceSets { - main { - java { - srcDirs = ['src/main/java17'] - } - } - } - - dependencies { - annotationProcessor project(':annotations') - annotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - annotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.9' - - compileOnly project(':annotations') - compileOnly project(':progress-tracking') - compileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - compileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.9' - compileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.9' - - implementation project(':core') - implementation project(':storage-engine-adapter-api') - implementation project(':config-api') - implementation project(':string-formatting') - } -} else { - multiRelease { - targetVersions 11, 17 - } - - if (!project.hasProperty('no-forbidden-apis')) { - forbiddenApisJava17 { - exclude('**') - } - } - - dependencies { - annotationProcessor group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'annotations', version: ver.'neo4j' - compileOnly group: 'org.neo4j', name: 'neo4j-kernel-api', version: ver.'neo4j' - - implementation project(':storage-engine-adapter-api') - - java17AnnotationProcessor project(':annotations') - java17AnnotationProcessor group: 'org.immutables', name: 'value', version: ver.'immutables' - java17AnnotationProcessor group: 'org.neo4j', name: 'annotations', version: neos.'5.9' - - java17CompileOnly project(':annotations') - java17CompileOnly project(':progress-tracking') - java17CompileOnly group: 'org.immutables', name: 'value-annotations', version: ver.'immutables' - java17CompileOnly group: 'org.neo4j', name: 'neo4j', version: neos.'5.9' - java17CompileOnly group: 'org.neo4j', name: 'neo4j-record-storage-engine', version: neos.'5.9' - - - java17Implementation project(':core') - java17Implementation project(':storage-engine-adapter-api') - java17Implementation project(':config-api') - java17Implementation project(':string-formatting') - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java b/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java deleted file mode 100644 index e7df5ca062..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.id.IdController; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.lock.LockService; -import org.neo4j.logging.LogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogVersionRepository; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.TransactionIdStore; -import org.neo4j.storageengine.migration.RollingUpgradeCompatibility; -import org.neo4j.storageengine.migration.SchemaRuleMigrationAccess; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.token.TokenHolders; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - @Override - public String name() { - return "unsupported5.9"; - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - PageCacheTracer pageCacheTracer - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(String storeVersion) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public StoreVersion versionInformation(StoreId storeId) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public RollingUpgradeCompatibility rollingUpgradeCompatibility() { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fs, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - PageCacheTracer cacheTracer, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - IdController idController, - DatabaseHealth databaseHealth, - LogProvider internalLogProvider, - LogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - PageCacheTracer cacheTracer, - boolean createStoreIfNotExists, - DatabaseReadOnlyChecker readOnlyChecker, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public List listStorageFiles(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) throws - IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout, PageCache pageCache) { - return false; - } - - @Override - public TransactionIdStore readOnlyTransactionIdStore( - FileSystemAbstraction filySystem, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public LogVersionRepository readOnlyLogVersionRepository( - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer cacheTracer, - DatabaseReadOnlyChecker readOnlyChecker - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public StoreId storeId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public void setStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - StoreId storeId, - long upgradeTxChecksum, - long upgradeTxCommitTimestamp - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public void setExternalStoreUUID( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext, - UUID externalStoreId - ) throws IOException { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public SchemaRuleMigrationAccess schemaRuleMigrationAccess( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - LogService logService, - String recordFormats, - PageCacheTracer cacheTracer, - CursorContext cursorContext, - MemoryTracker memoryTracker - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - Config config, - DatabaseLayout databaseLayout, - CursorContext cursorContext - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache - ) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public CommandReaderFactory commandReaderFactory() { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public DatabaseLayout databaseLayout(Neo4jLayout neo4jLayout, String databaseName) { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index e43773a19d..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return false; - } - - @Override - public StorageEngineProxyApi load() { - throw new UnsupportedOperationException("5.9 storage engine requires JDK17"); - } - - @Override - public String description() { - return "Storage Engine 5.9"; - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCommandCreationContextImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCommandCreationContextImpl.java deleted file mode 100644 index 6bad2296b0..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCommandCreationContextImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.configuration.Config; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.KernelVersionProvider; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.cursor.StoreCursors; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Supplier; - -public class InMemoryCommandCreationContextImpl implements CommandCreationContext { - - private final AtomicLong schemaTokens; - private final AtomicInteger propertyTokens; - private final AtomicInteger labelTokens; - private final AtomicInteger typeTokens; - - InMemoryCommandCreationContextImpl() { - this.schemaTokens = new AtomicLong(0); - this.propertyTokens = new AtomicInteger(0); - this.labelTokens = new AtomicInteger(0); - this.typeTokens = new AtomicInteger(0); - } - - @Override - public long reserveNode() { - throw new UnsupportedOperationException("Creating nodes is not supported"); - } - - @Override - public long reserveRelationship( - long sourceNode, - long targetNode, - int relationshipType, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - throw new UnsupportedOperationException("Creating relationships is not supported"); - } - - @Override - public long reserveSchema() { - return schemaTokens.getAndIncrement(); - } - - @Override - public int reserveLabelTokenId() { - return labelTokens.getAndIncrement(); - } - - @Override - public int reservePropertyKeyTokenId() { - return propertyTokens.getAndIncrement(); - } - - @Override - public int reserveRelationshipTypeTokenId() { - return typeTokens.getAndIncrement(); - } - - @Override - public void close() { - - } - - @Override - public void initialize( - KernelVersionProvider kernelVersionProvider, - CursorContext cursorContext, - StoreCursors storeCursors, - Supplier oldestActiveTransactionSequenceNumber, - ResourceLocker locks, - Supplier lockTracer - ) { - - } - - @Override - public KernelVersion kernelVersion() { - // NOTE: Double-check if this is still correct when you copy this into a new compat layer - return KernelVersion.getLatestVersion(Config.newBuilder().build()); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCountsStoreImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCountsStoreImpl.java deleted file mode 100644 index 7cf4f836b7..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryCountsStoreImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.documented.ReporterFactory; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.counts.CountsStorage; -import org.neo4j.counts.CountsVisitor; -import org.neo4j.gds.NodeLabel; -import org.neo4j.gds.api.GraphStore; -import org.neo4j.internal.helpers.progress.ProgressMonitorFactory; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.FileFlushEvent; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenNotFoundException; - -public class InMemoryCountsStoreImpl implements CountsStorage, CountsAccessor { - - private final GraphStore graphStore; - private final TokenHolders tokenHolders; - - public InMemoryCountsStoreImpl( - GraphStore graphStore, - TokenHolders tokenHolders - ) { - - this.graphStore = graphStore; - this.tokenHolders = tokenHolders; - } - - @Override - public void start( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - - } - - @Override - public void checkpoint(FileFlushEvent fileFlushEvent, CursorContext cursorContext) { - - } - - @Override - public long nodeCount(int labelId, CursorContext cursorContext) { - if (labelId == -1) { - return graphStore.nodeCount(); - } - - String nodeLabel; - try { - nodeLabel = tokenHolders.labelTokens().getTokenById(labelId).name(); - } catch (TokenNotFoundException e) { - throw new RuntimeException(e); - } - return graphStore.nodes().nodeCount(NodeLabel.of(nodeLabel)); - } - - @Override - public long relationshipCount(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - // TODO: this is quite wrong - return graphStore.relationshipCount(); - } - - @Override - public boolean consistencyCheck( - ReporterFactory reporterFactory, - CursorContextFactory contextFactory, - int numThreads, - ProgressMonitorFactory progressMonitorFactory - ) { - return true; - } - - @Override - public CountsAccessor.Updater apply(long txId, boolean isLast, CursorContext cursorContext) { - throw new UnsupportedOperationException("Updates are not supported"); - } - - @Override - public void close() { - - } - - @Override - public void accept(CountsVisitor visitor, CursorContext cursorContext) { - tokenHolders.labelTokens().getAllTokens().forEach(labelToken -> { - visitor.visitNodeCount(labelToken.id(), nodeCount(labelToken.id(), cursorContext)); - }); - - visitor.visitRelationshipCount(-1, -1, -1, graphStore.relationshipCount()); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryMetaDataProviderImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryMetaDataProviderImpl.java deleted file mode 100644 index 77f9b72465..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryMetaDataProviderImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.internal.recordstorage.InMemoryLogVersionRepository59; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.ExternalStoreId; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionId; - -import java.io.IOException; -import java.util.Optional; -import java.util.UUID; - -public class InMemoryMetaDataProviderImpl implements MetadataProvider { - - private final ExternalStoreId externalStoreId; - private final InMemoryLogVersionRepository59 logVersionRepository; - private final InMemoryTransactionIdStoreImpl transactionIdStore; - - InMemoryMetaDataProviderImpl() { - this.logVersionRepository = new InMemoryLogVersionRepository59(); - this.externalStoreId = new ExternalStoreId(UUID.randomUUID()); - this.transactionIdStore = new InMemoryTransactionIdStoreImpl(); - } - - @Override - public ExternalStoreId getExternalStoreId() { - return this.externalStoreId; - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - return this.transactionIdStore.getLastClosedTransaction(); - } - - @Override - public void setCurrentLogVersion(long version) { - logVersionRepository.setCurrentLogVersion(version); - } - - @Override - public long incrementAndGetVersion() { - return logVersionRepository.incrementAndGetVersion(); - } - - @Override - public void setCheckpointLogVersion(long version) { - logVersionRepository.setCheckpointLogVersion(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return logVersionRepository.incrementAndGetCheckpointLogVersion(); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - transactionIdStore.transactionCommitted(transactionId, checksum, commitTimestamp, consensusIndex); - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - transactionIdStore.setLastCommittedAndClosedTransactionId( - transactionId, - checksum, - commitTimestamp, - consensusIndex, - byteOffset, - logVersion - ); - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.transactionClosed( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.transactionIdStore.resetLastClosedTransaction( - transactionId, - logVersion, - byteOffset, - checksum, - commitTimestamp, - consensusIndex - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - public void regenerateMetadata(StoreId storeId, UUID externalStoreUUID, CursorContext cursorContext) { - } - - @Override - public StoreId getStoreId() { - return StoreId.UNKNOWN; - } - - @Override - public void close() throws IOException { - } - - @Override - public long getCurrentLogVersion() { - return this.logVersionRepository.getCurrentLogVersion(); - } - - @Override - public long getCheckpointLogVersion() { - return this.logVersionRepository.getCheckpointLogVersion(); - } - - @Override - public long nextCommittingTransactionId() { - return this.transactionIdStore.nextCommittingTransactionId(); - } - - @Override - public long committingTransactionId() { - return this.transactionIdStore.committingTransactionId(); - } - - @Override - public long getLastCommittedTransactionId() { - return this.transactionIdStore.getLastCommittedTransactionId(); - } - - @Override - public TransactionId getLastCommittedTransaction() { - return this.transactionIdStore.getLastCommittedTransaction(); - } - - @Override - public long getLastClosedTransactionId() { - return this.transactionIdStore.getLastClosedTransactionId(); - } - - @Override - public Optional getDatabaseIdUuid(CursorContext cursorTracer) { - throw new IllegalStateException("Not supported"); - } - - @Override - public void setDatabaseIdUuid(UUID uuid, CursorContext cursorContext) { - throw new IllegalStateException("Not supported"); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodeCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodeCursor.java deleted file mode 100644 index be9576e484..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodeCursor.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.api.GraphStore; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.Degrees; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodeCursor extends AbstractInMemoryNodeCursor { - - public InMemoryNodeCursor(GraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public boolean hasLabel() { - return hasAtLeastOneLabelForCurrentNode(); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor, PropertySelection selection) { - propertyCursor.initNodeProperties(propertiesReference(), selection); - } - - @Override - public void properties(StoragePropertyCursor propertyCursor) { - properties(propertyCursor, PropertySelection.ALL_PROPERTIES); - } - - @Override - public boolean supportsFastRelationshipsTo() { - return false; - } - - @Override - public void relationshipsTo( - StorageRelationshipTraversalCursor storageRelationshipTraversalCursor, - RelationshipSelection relationshipSelection, - long neighbourNodeReference - ) { - throw new UnsupportedOperationException(); - } - - @Override - public void degrees(RelationshipSelection selection, Degrees.Mutator mutator) { - } - - @Override - public boolean scanBatch(AllNodeScan allNodeScan, long sizeHint) { - return super.scanBatch(allNodeScan, (int) sizeHint); - } - - @Override - public long[] labels() { - return longLabels(); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodePropertyCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodePropertyCursor.java deleted file mode 100644 index 43b8fd4837..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryNodePropertyCursor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.token.TokenHolders; - -public class InMemoryNodePropertyCursor extends AbstractInMemoryNodePropertyCursor { - - public InMemoryNodePropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - reset(); - setId(((LongReference) reference).id); - setPropertySelection(new InMemoryPropertySelectionImpl(selection)); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertyCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertyCursor.java deleted file mode 100644 index 2b6499a1f9..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertyCursor.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.compat.AbstractInMemoryPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryPropertyCursor extends AbstractInMemoryPropertyCursor { - - public InMemoryPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(reference, selection); - } - - @Override - public void initNodeProperties(StorageNodeCursor nodeCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryNodePropertyCursor)) { - this.delegate = new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryNodePropertyCursor) delegate).initNodeProperties(nodeCursor, selection); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(relationshipCursor, selection); - } - - @Override - public void initRelationshipProperties(Reference reference, PropertySelection selection, long ownerReference) { - if (this.delegate == null || !(this.delegate instanceof InMemoryRelationshipPropertyCursor)) { - this.delegate = new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - ((InMemoryRelationshipPropertyCursor) delegate).initRelationshipProperties(reference, selection); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertySelectionImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertySelectionImpl.java deleted file mode 100644 index 5724e2829d..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryPropertySelectionImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.compat.InMemoryPropertySelection; -import org.neo4j.storageengine.api.PropertySelection; - -public class InMemoryPropertySelectionImpl implements InMemoryPropertySelection { - - private final PropertySelection propertySelection; - - public InMemoryPropertySelectionImpl(PropertySelection propertySelection) {this.propertySelection = propertySelection;} - - @Override - public boolean isLimited() { - return propertySelection.isLimited(); - } - - @Override - public int numberOfKeys() { - return propertySelection.numberOfKeys(); - } - - @Override - public int key(int index) { - return propertySelection.key(index); - } - - @Override - public boolean test(int key) { - return propertySelection.test(key); - } - - @Override - public boolean isKeysOnly() { - return propertySelection.isKeysOnly(); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipPropertyCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipPropertyCursor.java deleted file mode 100644 index 806f0b2565..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipPropertyCursor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.storageengine.InMemoryRelationshipCursor; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StorageRelationshipCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipPropertyCursor extends AbstractInMemoryRelationshipPropertyCursor { - - InMemoryRelationshipPropertyCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public void initNodeProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - - } - - @Override - public void initRelationshipProperties( - Reference reference, PropertySelection propertySelection, long ownerReference - ) { - var relationshipId = ((LongReference) reference).id; - var relationshipCursor = new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - relationshipCursor.single(relationshipId); - relationshipCursor.next(); - relationshipCursor.properties(this, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public void initRelationshipProperties(StorageRelationshipCursor relationshipCursor, PropertySelection selection) { - var inMemoryRelationshipCursor = (InMemoryRelationshipCursor) relationshipCursor; - inMemoryRelationshipCursor.properties(this, selection); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipScanCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipScanCursor.java deleted file mode 100644 index 6f0c089ee8..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipScanCursor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipScanCursor extends AbstractInMemoryRelationshipScanCursor { - - public InMemoryRelationshipScanCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - super(graphStore, tokenHolders); - } - - @Override - public void single(long reference, long sourceNodeReference, int type, long targetNodeReference) { - single(reference); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor storagePropertyCursor, PropertySelection propertySelection - ) { - properties(storagePropertyCursor, new InMemoryPropertySelectionImpl(propertySelection)); - } - - @Override - public boolean scanBatch(AllRelationshipsScan allRelationshipsScan, long sizeHint) { - return super.scanBatch(allRelationshipsScan, (int) sizeHint); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipTraversalCursor.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipTraversalCursor.java deleted file mode 100644 index 6cd7ebf031..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryRelationshipTraversalCursor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.storageengine.api.LongReference; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.Reference; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.token.TokenHolders; - -public class InMemoryRelationshipTraversalCursor extends AbstractInMemoryRelationshipTraversalCursor { - - public InMemoryRelationshipTraversalCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - super(graphStore, tokenHolders); - } - - @Override - public Reference propertiesReference() { - return LongReference.longReference(getId()); - } - - @Override - public void properties( - StoragePropertyCursor propertyCursor, PropertySelection selection - ) { - properties(propertyCursor, new InMemoryPropertySelectionImpl(selection)); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java deleted file mode 100644 index 95bd036fb0..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineFactory.java +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.eclipse.collections.api.factory.Sets; -import org.eclipse.collections.api.set.ImmutableSet; -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.configuration.Config; -import org.neo4j.consistency.checking.ConsistencyFlags; -import org.neo4j.consistency.report.ConsistencySummaryStatistics; -import org.neo4j.dbms.database.readonly.DatabaseReadOnlyChecker; -import org.neo4j.function.ThrowingSupplier; -import org.neo4j.gds.annotation.SuppressForbidden; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineFactoryIdProvider; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector; -import org.neo4j.internal.batchimport.AdditionalInitialIds; -import org.neo4j.internal.batchimport.BatchImporter; -import org.neo4j.internal.batchimport.Configuration; -import org.neo4j.internal.batchimport.IncrementalBatchImporter; -import org.neo4j.internal.batchimport.IndexImporterFactory; -import org.neo4j.internal.batchimport.Monitor; -import org.neo4j.internal.batchimport.ReadBehaviour; -import org.neo4j.internal.batchimport.input.Collector; -import org.neo4j.internal.batchimport.input.Input; -import org.neo4j.internal.batchimport.input.LenientStoreInput; -import org.neo4j.internal.id.IdGeneratorFactory; -import org.neo4j.internal.id.ScanOnOpenReadOnlyIdGeneratorFactory; -import org.neo4j.internal.recordstorage.InMemoryStorageCommandReaderFactory59; -import org.neo4j.internal.recordstorage.StoreTokens; -import org.neo4j.internal.schema.IndexConfigCompleter; -import org.neo4j.internal.schema.SchemaRule; -import org.neo4j.internal.schema.SchemaState; -import org.neo4j.io.fs.FileSystemAbstraction; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.layout.Neo4jLayout; -import org.neo4j.io.layout.recordstorage.RecordDatabaseLayout; -import org.neo4j.io.pagecache.PageCache; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.context.CursorContextFactory; -import org.neo4j.io.pagecache.tracing.PageCacheTracer; -import org.neo4j.kernel.KernelVersionRepository; -import org.neo4j.kernel.api.index.IndexProvidersAccess; -import org.neo4j.kernel.impl.api.index.IndexProviderMap; -import org.neo4j.kernel.impl.locking.LockManager; -import org.neo4j.kernel.impl.store.MetaDataStore; -import org.neo4j.kernel.impl.store.NeoStores; -import org.neo4j.kernel.impl.store.StoreFactory; -import org.neo4j.kernel.impl.store.StoreType; -import org.neo4j.kernel.impl.store.cursor.CachedStoreCursors; -import org.neo4j.kernel.impl.transaction.log.LogTailLogVersionsMetadata; -import org.neo4j.kernel.impl.transaction.log.LogTailMetadata; -import org.neo4j.lock.LockService; -import org.neo4j.logging.InternalLog; -import org.neo4j.logging.InternalLogProvider; -import org.neo4j.logging.NullLogProvider; -import org.neo4j.logging.internal.LogService; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.monitoring.DatabaseHealth; -import org.neo4j.scheduler.JobScheduler; -import org.neo4j.storageengine.api.CommandReaderFactory; -import org.neo4j.storageengine.api.ConstraintRuleAccessor; -import org.neo4j.storageengine.api.LogFilesInitializer; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.SchemaRule44; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageFilesState; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; -import org.neo4j.storageengine.migration.StoreMigrationParticipant; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.NamedToken; -import org.neo4j.token.api.TokenHolder; -import org.neo4j.token.api.TokensLoader; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.UncheckedIOException; -import java.nio.file.OpenOption; -import java.nio.file.Path; -import java.time.Clock; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; - -@ServiceProvider -public class InMemoryStorageEngineFactory implements StorageEngineFactory { - - static final String IN_MEMORY_STORAGE_ENGINE_NAME = "in-memory-59"; - - public InMemoryStorageEngineFactory() { - StorageEngineProxyApi.requireNeo4jVersion(Neo4jVersion.V_5_9, StorageEngineFactory.class); - } - - @Override - public byte id() { - return StorageEngineFactoryIdProvider.ID; - } - - @Override - public boolean storageExists(FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout) { - return false; - } - - @Override - public StorageEngine instantiate( - FileSystemAbstraction fs, - Clock clock, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - TokenHolders tokenHolders, - SchemaState schemaState, - ConstraintRuleAccessor constraintSemantics, - IndexConfigCompleter indexConfigCompleter, - LockService lockService, - IdGeneratorFactory idGeneratorFactory, - DatabaseHealth databaseHealth, - InternalLogProvider internalLogProvider, - InternalLogProvider userLogProvider, - RecoveryCleanupWorkCollector recoveryCleanupWorkCollector, - LogTailMetadata logTailMetadata, - KernelVersionRepository kernelVersionRepository, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - idGeneratorFactory, - pageCache, - pageCacheTracer, - fs, - internalLogProvider, - contextFactory, - false, - logTailMetadata - ); - - factory.openNeoStores(StoreType.LABEL_TOKEN).close(); - - return new InMemoryStorageEngineImpl( - databaseLayout, - tokenHolders - ); - } - - @Override - public Optional databaseIdUuid( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache, CursorContext cursorContext - ) { - var fieldAccess = MetaDataStore.getFieldAccess( - pageCache, - RecordDatabaseLayout.convert(databaseLayout).metadataStore(), - databaseLayout.getDatabaseName(), - cursorContext - ); - - try { - return fieldAccess.readDatabaseUUID(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - @Override - public List migrationParticipants( - FileSystemAbstraction fileSystemAbstraction, - Config config, - PageCache pageCache, - JobScheduler jobScheduler, - LogService logService, - MemoryTracker memoryTracker, - PageCacheTracer pageCacheTracer, - CursorContextFactory cursorContextFactory, - boolean b - ) { - return List.of(); - } - - @Override - public DatabaseLayout databaseLayout( - Neo4jLayout neo4jLayout, String databaseName - ) { - return RecordDatabaseLayout.of(neo4jLayout, databaseName); - } - - @Override - public DatabaseLayout formatSpecificDatabaseLayout(DatabaseLayout plainLayout) { - return databaseLayout(plainLayout.getNeo4jLayout(), plainLayout.getDatabaseName()); - } - - @SuppressForbidden(reason = "This is the compat layer and we don't really need to go through the proxy") - @Override - public BatchImporter batchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCacheTracer pageCacheTracer, - Configuration configuration, - LogService logService, - PrintStream printStream, - boolean b, - AdditionalInitialIds additionalInitialIds, - Config config, - Monitor monitor, - JobScheduler jobScheduler, - Collector collector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory cursorContextFactory - ) { - throw new UnsupportedOperationException("Batch Import into GDS is not supported"); - } - - @Override - public Input asBatchImporterInput( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - MemoryTracker memoryTracker, - ReadBehaviour readBehaviour, - boolean b, - CursorContextFactory cursorContextFactory, - LogTailMetadata logTailMetadata - ) { - NeoStores neoStores = (new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - logTailMetadata - )).openAllNeoStores(); - return new LenientStoreInput( - neoStores, - readBehaviour.decorateTokenHolders(this.loadReadOnlyTokens(neoStores, true, cursorContextFactory)), - true, - cursorContextFactory, - readBehaviour - ); - } - - @Override - public long optimalAvailableConsistencyCheckerMemory( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache - ) { - return 0; - } - - @Override - public String name() { - return IN_MEMORY_STORAGE_ENGINE_NAME; - } - - @Override - public Set supportedFormats(boolean includeFormatsUnderDevelopment) { - return Set.of(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public boolean supportedFormat(String format, boolean includeFormatsUnderDevelopment) { - return format.equals(IN_MEMORY_STORAGE_ENGINE_NAME); - } - - @Override - public MetadataProvider transactionMetaDataStore( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - DatabaseReadOnlyChecker readOnlyChecker, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata, - PageCacheTracer pageCacheTracer - ) { - return new InMemoryMetaDataProviderImpl(); - } - - @Override - public StoreVersionCheck versionCheck( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - LogService logService, - CursorContextFactory cursorContextFactory - ) { - return new InMemoryVersionCheck(); - } - - @Override - public List loadSchemaRules( - FileSystemAbstraction fileSystemAbstraction, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - boolean b, - Function function, - CursorContextFactory cursorContextFactory - ) { - return List.of(); - } - - @Override - public List load44SchemaRules( - FileSystemAbstraction fs, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - Config config, - DatabaseLayout databaseLayout, - CursorContextFactory contextFactory, - LogTailLogVersionsMetadata logTailMetadata - ) { - return List.of(); - } - - @Override - public TokenHolders loadReadOnlyTokens( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - PageCacheTracer pageCacheTracer, - boolean lenient, - CursorContextFactory cursorContextFactory - ) { - StoreFactory factory = new StoreFactory( - databaseLayout, - config, - new ScanOnOpenReadOnlyIdGeneratorFactory(), - pageCache, - pageCacheTracer, - fileSystemAbstraction, - NullLogProvider.getInstance(), - cursorContextFactory, - false, - LogTailMetadata.EMPTY_LOG_TAIL - ); - try ( NeoStores stores = factory.openNeoStores( - StoreType.PROPERTY_KEY_TOKEN, StoreType.PROPERTY_KEY_TOKEN_NAME, - StoreType.LABEL_TOKEN, StoreType.LABEL_TOKEN_NAME, - StoreType.RELATIONSHIP_TYPE_TOKEN, StoreType.RELATIONSHIP_TYPE_TOKEN_NAME ) ) - { - return loadReadOnlyTokens(stores, lenient, cursorContextFactory); - } - } - - private TokenHolders loadReadOnlyTokens( - NeoStores stores, - boolean lenient, - CursorContextFactory cursorContextFactory - ) - { - try ( var cursorContext = cursorContextFactory.create("loadReadOnlyTokens"); - var storeCursors = new CachedStoreCursors( stores, cursorContext ) ) - { - stores.start( cursorContext ); - TokensLoader loader = lenient ? StoreTokens.allReadableTokens( stores ) : StoreTokens.allTokens( stores ); - TokenHolder propertyKeys = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_PROPERTY_KEY ); - TokenHolder labels = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_LABEL ); - TokenHolder relationshipTypes = new DelegatingTokenHolder( ReadOnlyTokenCreator.READ_ONLY, TokenHolder.TYPE_RELATIONSHIP_TYPE ); - - propertyKeys.setInitialTokens( lenient ? unique( loader.getPropertyKeyTokens( storeCursors ) ) : loader.getPropertyKeyTokens( storeCursors ) ); - labels.setInitialTokens( lenient ? unique( loader.getLabelTokens( storeCursors ) ) : loader.getLabelTokens( storeCursors ) ); - relationshipTypes.setInitialTokens( - lenient ? unique( loader.getRelationshipTypeTokens( storeCursors ) ) : loader.getRelationshipTypeTokens( storeCursors ) ); - return new TokenHolders( propertyKeys, labels, relationshipTypes ); - } - catch ( IOException e ) - { - throw new UncheckedIOException( e ); - } - } - - private static List unique( List tokens ) - { - if ( !tokens.isEmpty() ) - { - Set names = new HashSet<>( tokens.size() ); - int i = 0; - while ( i < tokens.size() ) - { - if ( names.add( tokens.get( i ).name() ) ) - { - i++; - } - else - { - // Remove the token at the given index, by replacing it with the last token in the list. - // This changes the order of elements, but can be done in constant time instead of linear time. - int lastIndex = tokens.size() - 1; - NamedToken endToken = tokens.remove( lastIndex ); - if ( i < lastIndex ) - { - tokens.set( i, endToken ); - } - } - } - } - return tokens; - } - - @Override - public CommandReaderFactory commandReaderFactory() { - return InMemoryStorageCommandReaderFactory59.INSTANCE; - } - - @Override - public void consistencyCheck( - FileSystemAbstraction fileSystem, - DatabaseLayout layout, - Config config, - PageCache pageCache, - IndexProviderMap indexProviders, - InternalLog log, - ConsistencySummaryStatistics summary, - int numberOfThreads, - long maxOffHeapCachingMemory, - OutputStream progressOutput, - boolean verbose, - ConsistencyFlags flags, - CursorContextFactory contextFactory, - PageCacheTracer pageCacheTracer, - LogTailMetadata logTailMetadata - ) { - // we can do no-op, since our "database" is _always_ consistent - } - - @Override - public ImmutableSet getStoreOpenOptions( - FileSystemAbstraction fs, - PageCache pageCache, - DatabaseLayout layout, - CursorContextFactory contextFactory - ) { - // Not sure about this, empty set is returned when the store files are in `little-endian` format - // See: `org.neo4j.kernel.impl.store.format.PageCacheOptionsSelector.select` - return Sets.immutable.empty(); - } - - @Override - public StoreId retrieveStoreId( - FileSystemAbstraction fs, - DatabaseLayout databaseLayout, - PageCache pageCache, - CursorContext cursorContext - ) throws IOException { - return StoreId.retrieveFromStore(fs, databaseLayout, pageCache, cursorContext); - } - - - @Override - public Optional versionInformation(StoreVersionIdentifier storeVersionIdentifier) { - return Optional.of(new InMemoryStoreVersion()); - } - - @Override - public void resetMetadata( - FileSystemAbstraction fileSystemAbstraction, - DatabaseLayout databaseLayout, - Config config, - PageCache pageCache, - CursorContextFactory cursorContextFactory, - PageCacheTracer pageCacheTracer, - StoreId storeId, - UUID externalStoreId - ) { - throw new UnsupportedOperationException(); - } - - @Override - public IncrementalBatchImporter incrementalBatchImporter( - DatabaseLayout databaseLayout, - FileSystemAbstraction fileSystem, - PageCacheTracer pageCacheTracer, - Configuration config, - LogService logService, - PrintStream progressOutput, - boolean verboseProgressOutput, - AdditionalInitialIds additionalInitialIds, - ThrowingSupplier logTailMetadataSupplier, - Config dbConfig, - Monitor monitor, - JobScheduler jobScheduler, - Collector badCollector, - LogFilesInitializer logFilesInitializer, - IndexImporterFactory indexImporterFactory, - MemoryTracker memoryTracker, - CursorContextFactory contextFactory, - IndexProvidersAccess indexProvidersAccess - ) { - throw new UnsupportedOperationException(); - } - - @Override - public LockManager createLockManager(Config config, SystemNanoClock clock) { - return LockManager.NO_LOCKS_LOCK_MANAGER; - } - - @Override - public List listStorageFiles( - FileSystemAbstraction fileSystem, DatabaseLayout databaseLayout - ) { - return Collections.emptyList(); - } - - @Override - public StorageFilesState checkStoreFileState( - FileSystemAbstraction fs, DatabaseLayout databaseLayout, PageCache pageCache - ) { - return StorageFilesState.recoveredState(); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineImpl.java deleted file mode 100644 index b3ca655a13..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageEngineImpl.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.configuration.Config; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.exceptions.KernelException; -import org.neo4j.gds.compat.TokenManager; -import org.neo4j.gds.config.GraphProjectConfig; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.gds.core.loading.GraphStoreCatalog; -import org.neo4j.gds.storageengine.InMemoryDatabaseCreationCatalog; -import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor; -import org.neo4j.internal.diagnostics.DiagnosticsLogger; -import org.neo4j.internal.recordstorage.InMemoryStorageReader59; -import org.neo4j.internal.schema.StorageEngineIndexingBehaviour; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.io.pagecache.tracing.DatabaseFlushEvent; -import org.neo4j.kernel.KernelVersion; -import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; -import org.neo4j.kernel.lifecycle.Lifecycle; -import org.neo4j.kernel.lifecycle.LifecycleAdapter; -import org.neo4j.lock.LockGroup; -import org.neo4j.lock.LockService; -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.logging.InternalLog; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.CommandBatchToApply; -import org.neo4j.storageengine.api.CommandCreationContext; -import org.neo4j.storageengine.api.CommandStream; -import org.neo4j.storageengine.api.IndexUpdateListener; -import org.neo4j.storageengine.api.MetadataProvider; -import org.neo4j.storageengine.api.StorageCommand; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEngineFactory; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StoreFileMetadata; -import org.neo4j.storageengine.api.StoreId; -import org.neo4j.storageengine.api.TransactionApplicationMode; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.storageengine.api.enrichment.Enrichment; -import org.neo4j.storageengine.api.enrichment.EnrichmentCommand; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; -import org.neo4j.storageengine.api.txstate.TxStateVisitor; -import org.neo4j.storageengine.api.txstate.validation.TransactionValidatorFactory; -import org.neo4j.time.SystemNanoClock; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static org.neo4j.gds.utils.StringFormatting.formatWithLocale; - -public final class InMemoryStorageEngineImpl implements StorageEngine { - - public static final byte ID = 42; - private final MetadataProvider metadataProvider; - private final CypherGraphStore graphStore; - private final DatabaseLayout databaseLayout; - private final InMemoryTransactionStateVisitor txStateVisitor; - - private final CommandCreationContext commandCreationContext; - - private final TokenManager tokenManager; - private final InMemoryCountsStoreImpl countsStore; - - private static final StorageEngineIndexingBehaviour INDEXING_BEHAVIOUR = new StorageEngineIndexingBehaviour() { - @Override - public boolean useNodeIdsInRelationshipTokenIndex() { - return false; - } - - @Override - public boolean requireCoordinationLocks() { - return false; - } - - @Override - public int nodesPerPage() { - return 0; - } - - @Override - public int relationshipsPerPage() { - return 0; - } - }; - - InMemoryStorageEngineImpl( - DatabaseLayout databaseLayout, - TokenHolders tokenHolders - ) { - this.databaseLayout = databaseLayout; - this.graphStore = getGraphStoreFromCatalog(databaseLayout.getDatabaseName()); - this.txStateVisitor = new InMemoryTransactionStateVisitor(graphStore, tokenHolders, false); - this.commandCreationContext = new InMemoryCommandCreationContextImpl(); - this.tokenManager = new TokenManager( - tokenHolders, - InMemoryStorageEngineImpl.this.txStateVisitor, - InMemoryStorageEngineImpl.this.graphStore, - commandCreationContext - ); - InMemoryStorageEngineImpl.this.graphStore.initialize(tokenHolders); - this.countsStore = new InMemoryCountsStoreImpl(graphStore, tokenHolders); - this.metadataProvider = new InMemoryMetaDataProviderImpl(); - } - - private static CypherGraphStore getGraphStoreFromCatalog(String databaseName) { - var graphName = InMemoryDatabaseCreationCatalog.getRegisteredDbCreationGraphName(databaseName); - return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores() - .filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig - .config() - .graphName() - .equals(graphName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(formatWithLocale( - "No graph with name `%s` was found in GraphStoreCatalog. Available graph names are %s", - graphName, - GraphStoreCatalog.getAllGraphStores() - .map(GraphStoreCatalog.GraphStoreWithUserNameAndConfig::config) - .map(GraphProjectConfig::graphName) - .collect(Collectors.toList()) - ))) - .graphStore(); - } - - @Override - public StoreEntityCounters storeEntityCounters() { - return new StoreEntityCounters() { - @Override - public long nodes() { - return graphStore.nodeCount(); - } - - @Override - public long relationships() { - return graphStore.relationshipCount(); - } - - @Override - public long properties() { - return graphStore.nodePropertyKeys().size() + graphStore.relationshipPropertyKeys().size(); - } - - @Override - public long relationshipTypes() { - return graphStore.relationshipTypes().size(); - } - - @Override - public long allNodesCountStore(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public long allRelationshipsCountStore(CursorContext cursorContext) { - return graphStore.relationshipCount(); - } - }; - } - - @Override - public void preAllocateStoreFilesForCommands( - CommandBatchToApply commandBatchToApply, - TransactionApplicationMode transactionApplicationMode - ) { - } - - @Override - public StoreCursors createStorageCursors(CursorContext initialContext) { - return StoreCursors.NULL; - } - - @Override - public StorageLocks createStorageLocks(ResourceLocker locker) { - return new InMemoryStorageLocksImpl(locker); - } - - @Override - public List createCommands( - ReadableTransactionState state, - StorageReader storageReader, - CommandCreationContext creationContext, - LockTracer lockTracer, - TxStateVisitor.Decorator additionalTxStateVisitor, - CursorContext cursorContext, - StoreCursors storeCursors, - MemoryTracker memoryTracker - ) throws KernelException { - state.accept(txStateVisitor); - return List.of(); - } - - @Override - public void dumpDiagnostics(InternalLog internalLog, DiagnosticsLogger diagnosticsLogger) { - } - - @Override - public List createUpgradeCommands( - KernelVersion versionToUpgradeFrom, - KernelVersion versionToUpgradeTo - ) { - return List.of(); - } - - @Override - public EnrichmentCommand createEnrichmentCommand(KernelVersion kernelVersion, Enrichment enrichment) { - throw new UnsupportedOperationException(); - } - - @Override - public StoreId retrieveStoreId() { - return metadataProvider.getStoreId(); - } - - @Override - public StorageEngineIndexingBehaviour indexingBehaviour() { - return INDEXING_BEHAVIOUR; - } - - @Override - public StorageReader newReader() { - return new InMemoryStorageReader59(graphStore, tokenManager.tokenHolders(), countsStore); - } - - @Override - public void addIndexUpdateListener(IndexUpdateListener listener) { - - } - - @Override - public void apply(CommandBatchToApply batch, TransactionApplicationMode mode) { - } - - @Override - public void init() { - } - - @Override - public void start() { - - } - - @Override - public void stop() { - shutdown(); - } - - @Override - public void shutdown() { - InMemoryDatabaseCreationCatalog.removeDatabaseEntry(databaseLayout.getDatabaseName()); - } - - @Override - public void listStorageFiles( - Collection atomic, Collection replayable - ) { - - } - - @Override - public Lifecycle schemaAndTokensLifecycle() { - return new LifecycleAdapter() { - @Override - public void init() { - - } - }; - } - - @Override - public CountsAccessor countsAccessor() { - return countsStore; - } - - @Override - public MetadataProvider metadataProvider() { - return metadataProvider; - } - - @Override - public String name() { - return "gds in-memory storage engine"; - } - - @Override - public byte id() { - return ID; - } - - @Override - public CommandCreationContext newCommandCreationContext() { - return commandCreationContext; - } - - @Override - public TransactionValidatorFactory createTransactionValidatorFactory(StorageEngineFactory storageEngineFactory, Config config, SystemNanoClock clock) { - return TransactionValidatorFactory.EMPTY_VALIDATOR_FACTORY; - } - - @Override - public void lockRecoveryCommands( - CommandStream commands, LockService lockService, LockGroup lockGroup, TransactionApplicationMode mode - ) { - - } - - @Override - public void rollback(ReadableTransactionState txState, CursorContext cursorContext) { - // rollback is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - // TODO: do we want to inspect the txState to infer if rollback was called explicitly or not? - } - - @Override - public void checkpoint(DatabaseFlushEvent flushEvent, CursorContext cursorContext) { - // checkpoint is not supported but it is also called when we fail for something else - // that we do not support, such as removing node properties - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageLocksImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageLocksImpl.java deleted file mode 100644 index 0b49cdb34a..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStorageLocksImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.lock.LockTracer; -import org.neo4j.lock.ResourceLocker; -import org.neo4j.storageengine.api.StorageLocks; -import org.neo4j.storageengine.api.txstate.ReadableTransactionState; - -public class InMemoryStorageLocksImpl implements StorageLocks { - - InMemoryStorageLocksImpl(ResourceLocker locker) {} - - @Override - public void acquireExclusiveNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveNodeLock(long... ids) {} - - @Override - public void acquireSharedNodeLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedNodeLock(long... ids) {} - - @Override - public void acquireExclusiveRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseExclusiveRelationshipLock(long... ids) {} - - @Override - public void acquireSharedRelationshipLock(LockTracer lockTracer, long... ids) {} - - @Override - public void releaseSharedRelationshipLock(long... ids) {} - - @Override - public void acquireRelationshipCreationLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireRelationshipDeletionLock( - LockTracer lockTracer, - long sourceNode, - long targetNode, - long relationship, - boolean relationshipAddedInTx, - boolean sourceNodeAddedInTx, - boolean targetNodeAddedInTx - ) { - } - - @Override - public void acquireNodeDeletionLock( - ReadableTransactionState readableTransactionState, - LockTracer lockTracer, - long node - ) {} - - @Override - public void acquireNodeLabelChangeLock(LockTracer lockTracer, long node, int labelId) {} -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStoreVersion.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStoreVersion.java deleted file mode 100644 index fcd75bd343..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryStoreVersion.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.storageengine.api.StoreVersion; -import org.neo4j.storageengine.api.format.Capability; -import org.neo4j.storageengine.api.format.CapabilityType; - -import java.util.Optional; - -public class InMemoryStoreVersion implements StoreVersion { - - public static final String STORE_VERSION = "gds-experimental"; - - @Override - public String getStoreVersionUserString() { - return "Unknown"; - } - - @Override - public Optional successorStoreVersion() { - return Optional.empty(); - } - - @Override - public String formatName() { - return getClass().getSimpleName(); - } - - @Override - public boolean onlyForMigration() { - return false; - } - - @Override - public boolean hasCapability(Capability capability) { - return false; - } - - @Override - public boolean hasCompatibleCapabilities( - StoreVersion otherVersion, CapabilityType type - ) { - return false; - } - - @Override - public String introductionNeo4jVersion() { - return "foo"; - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryTransactionIdStoreImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryTransactionIdStoreImpl.java deleted file mode 100644 index 2e220e4d3b..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryTransactionIdStoreImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.internal.recordstorage.AbstractTransactionIdStore; -import org.neo4j.io.pagecache.context.TransactionIdSnapshot; -import org.neo4j.kernel.impl.transaction.log.LogPosition; -import org.neo4j.storageengine.api.ClosedTransactionMetadata; -import org.neo4j.storageengine.api.TransactionId; -import org.neo4j.storageengine.api.TransactionIdStore; - -public class InMemoryTransactionIdStoreImpl extends AbstractTransactionIdStore { - - @Override - protected void initLastCommittedAndClosedTransactionId( - long previouslyCommittedTxId, - int checksum, - long previouslyCommittedTxCommitTimestamp, - long previouslyCommittedTxLogByteOffset, - long previouslyCommittedTxLogVersion - ) { - this.setLastCommittedAndClosedTransactionId( - previouslyCommittedTxId, - checksum, - previouslyCommittedTxCommitTimestamp, - TransactionIdStore.UNKNOWN_CONSENSUS_INDEX, - previouslyCommittedTxLogByteOffset, - previouslyCommittedTxLogVersion - ); - } - - @Override - public ClosedTransactionMetadata getLastClosedTransaction() { - long[] metaData = this.closedTransactionId.get(); - return new ClosedTransactionMetadata( - metaData[0], - new LogPosition(metaData[1], metaData[2]), - (int) metaData[3], - metaData[4], - metaData[5] - ); - } - - @Override - public TransactionIdSnapshot getClosedTransactionSnapshot() { - return new TransactionIdSnapshot(this.getLastClosedTransactionId()); - } - - @Override - protected TransactionId transactionId(long transactionId, int checksum, long commitTimestamp) { - return new TransactionId(transactionId, checksum, commitTimestamp, TransactionIdStore.UNKNOWN_CONSENSUS_INDEX); - } - - @Override - public void transactionCommitted(long transactionId, int checksum, long commitTimestamp, long consensusIndex) { - - } - - @Override - public void setLastCommittedAndClosedTransactionId( - long transactionId, - int checksum, - long commitTimestamp, - long consensusIndex, - long byteOffset, - long logVersion - ) { - - } - - @Override - public void transactionClosed( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.offer( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } - - @Override - public void resetLastClosedTransaction( - long transactionId, - long logVersion, - long byteOffset, - int checksum, - long commitTimestamp, - long consensusIndex - ) { - this.closedTransactionId.set( - transactionId, - new long[]{logVersion, byteOffset, checksum, commitTimestamp, consensusIndex} - ); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryVersionCheck.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryVersionCheck.java deleted file mode 100644 index fb196c18fb..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/InMemoryVersionCheck.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.kernel.impl.store.format.FormatFamily; -import org.neo4j.storageengine.api.StoreVersionCheck; -import org.neo4j.storageengine.api.StoreVersionIdentifier; - -import static org.neo4j.gds.compat._59.InMemoryStoreVersion.STORE_VERSION; - -public class InMemoryVersionCheck implements StoreVersionCheck { - - private static final StoreVersionIdentifier STORE_IDENTIFIER = new StoreVersionIdentifier( - STORE_VERSION, - FormatFamily.STANDARD.name(), - 0, - 0 - ); - - @Override - public boolean isCurrentStoreVersionFullySupported(CursorContext cursorContext) { - return true; - } - - @Override - public MigrationCheckResult getAndCheckMigrationTargetVersion(String formatFamily, CursorContext cursorContext) { - return new StoreVersionCheck.MigrationCheckResult(MigrationOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public UpgradeCheckResult getAndCheckUpgradeTargetVersion(CursorContext cursorContext) { - return new StoreVersionCheck.UpgradeCheckResult(UpgradeOutcome.NO_OP, STORE_IDENTIFIER, null, null); - } - - @Override - public String getIntroductionVersionFromVersion(StoreVersionIdentifier storeVersionIdentifier) { - return STORE_VERSION; - } - - public StoreVersionIdentifier findLatestVersion(String s) { - return STORE_IDENTIFIER; - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java deleted file mode 100644 index ec492f6073..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyFactoryImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.annotations.service.ServiceProvider; -import org.neo4j.gds.compat.Neo4jVersion; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.compat.StorageEngineProxyFactory; - -@ServiceProvider -public class StorageEngineProxyFactoryImpl implements StorageEngineProxyFactory { - - @Override - public boolean canLoad(Neo4jVersion version) { - return version == Neo4jVersion.V_5_9; - } - - @Override - public StorageEngineProxyApi load() { - return new StorageEngineProxyImpl(); - } - - @Override - public String description() { - return "Storage Engine RC"; - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyImpl.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyImpl.java deleted file mode 100644 index 49c30f4b2d..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/gds/compat/_59/StorageEngineProxyImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.gds.compat._59; - -import org.neo4j.common.Edition; -import org.neo4j.configuration.Config; -import org.neo4j.configuration.GraphDatabaseInternalSettings; -import org.neo4j.dbms.api.DatabaseManagementService; -import org.neo4j.gds.compat.AbstractInMemoryNodeCursor; -import org.neo4j.gds.compat.AbstractInMemoryNodePropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipPropertyCursor; -import org.neo4j.gds.compat.AbstractInMemoryRelationshipTraversalCursor; -import org.neo4j.gds.compat.GdsDatabaseManagementServiceBuilder; -import org.neo4j.gds.compat.GraphDatabaseApiProxy; -import org.neo4j.gds.compat.StorageEngineProxyApi; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.internal.recordstorage.AbstractInMemoryRelationshipScanCursor; -import org.neo4j.io.layout.DatabaseLayout; -import org.neo4j.storageengine.api.PropertySelection; -import org.neo4j.storageengine.api.RelationshipSelection; -import org.neo4j.storageengine.api.StorageEngine; -import org.neo4j.storageengine.api.StorageEntityCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.token.DelegatingTokenHolder; -import org.neo4j.token.ReadOnlyTokenCreator; -import org.neo4j.token.TokenHolders; -import org.neo4j.token.api.TokenHolder; - -import static org.neo4j.configuration.GraphDatabaseSettings.db_format; - -public class StorageEngineProxyImpl implements StorageEngineProxyApi { - - @Override - public void initRelationshipTraversalCursorForRelType( - StorageRelationshipTraversalCursor cursor, - long sourceNodeId, - int relTypeToken - ) { - var relationshipSelection = RelationshipSelection.selection( - relTypeToken, - Direction.OUTGOING - ); - cursor.init(sourceNodeId, -1, relationshipSelection); - } - - @Override - public StorageEngine createInMemoryStorageEngine(DatabaseLayout databaseLayout, TokenHolders tokenHolders) { - return new InMemoryStorageEngineImpl(databaseLayout, tokenHolders); - } - - @Override - public void createInMemoryDatabase( - DatabaseManagementService dbms, - String dbName, - Config config - ) { - config.set(db_format, InMemoryStorageEngineFactory.IN_MEMORY_STORAGE_ENGINE_NAME); - dbms.createDatabase(dbName, config); - } - - @Override - public GraphDatabaseService startAndGetInMemoryDatabase(DatabaseManagementService dbms, String dbName) { - dbms.startDatabase(dbName); - return dbms.database(dbName); - } - - @Override - public GdsDatabaseManagementServiceBuilder setSkipDefaultIndexesOnCreationSetting(GdsDatabaseManagementServiceBuilder dbmsBuilder) { - return dbmsBuilder.setConfig(GraphDatabaseInternalSettings.skip_default_indexes_on_creation, true); - } - - @Override - public AbstractInMemoryNodeCursor inMemoryNodeCursor(CypherGraphStore graphStore, TokenHolders tokenHolders) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryNodePropertyCursor inMemoryNodePropertyCursor( - CypherGraphStore graphStore, - TokenHolders tokenHolders - ) { - return new InMemoryNodePropertyCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipTraversalCursor inMemoryRelationshipTraversalCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipScanCursor inMemoryRelationshipScanCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public AbstractInMemoryRelationshipPropertyCursor inMemoryRelationshipPropertyCursor( - CypherGraphStore graphStore, TokenHolders tokenHolders - ) { - return new InMemoryRelationshipPropertyCursor(graphStore, tokenHolders); - } - - @Override - public void properties( - StorageEntityCursor storageCursor, StoragePropertyCursor propertyCursor, int[] propertySelection - ) { - PropertySelection selection; - if (propertySelection.length == 0) { - selection = PropertySelection.ALL_PROPERTIES; - } else { - selection = PropertySelection.selection(propertySelection); - } - storageCursor.properties(propertyCursor, selection); - } - - @Override - public Edition dbmsEdition(GraphDatabaseService databaseService) { - return GraphDatabaseApiProxy.dbmsInfo(databaseService).edition; - } - - @Override - public TokenHolders newTokenHolders() { - return new TokenHolders( - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_PROPERTY_KEY), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_LABEL), - new DelegatingTokenHolder(new ReadOnlyTokenCreator(), TokenHolder.TYPE_RELATIONSHIP_TYPE) - ); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository59.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository59.java deleted file mode 100644 index 793eae1cab..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryLogVersionRepository59.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.storageengine.api.LogVersionRepository; - -import java.util.concurrent.atomic.AtomicLong; - -public class InMemoryLogVersionRepository59 implements LogVersionRepository { - - private final AtomicLong logVersion; - private final AtomicLong checkpointLogVersion; - - public InMemoryLogVersionRepository59() { - this(0, 0); - } - - private InMemoryLogVersionRepository59(long initialLogVersion, long initialCheckpointLogVersion) { - this.logVersion = new AtomicLong(); - this.checkpointLogVersion = new AtomicLong(); - this.logVersion.set(initialLogVersion); - this.checkpointLogVersion.set(initialCheckpointLogVersion); - } - - @Override - public void setCurrentLogVersion(long version) { - this.logVersion.set(version); - } - - @Override - public long incrementAndGetVersion() { - return this.logVersion.incrementAndGet(); - } - - @Override - public void setCheckpointLogVersion(long version) { - this.checkpointLogVersion.set(version); - } - - @Override - public long incrementAndGetCheckpointLogVersion() { - return this.checkpointLogVersion.incrementAndGet(); - } - - @Override - public long getCurrentLogVersion() { - return this.logVersion.get(); - } - - @Override - public long getCheckpointLogVersion() { - return this.checkpointLogVersion.get(); - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory59.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory59.java deleted file mode 100644 index 4aac7460e2..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageCommandReaderFactory59.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.neo4j.kernel.KernelVersion; -import org.neo4j.storageengine.api.CommandReader; -import org.neo4j.storageengine.api.CommandReaderFactory; - -public class InMemoryStorageCommandReaderFactory59 implements CommandReaderFactory { - - public static final CommandReaderFactory INSTANCE = new InMemoryStorageCommandReaderFactory59(); - - @Override - public CommandReader get(KernelVersion kernelVersion) { - switch (kernelVersion) { - case V4_2: - return LogCommandSerializationV4_2.INSTANCE; - case V4_3_D4: - return LogCommandSerializationV4_3_D3.INSTANCE; - case V5_0: - return LogCommandSerializationV5_0.INSTANCE; - default: - throw new IllegalArgumentException("Unsupported kernel version " + kernelVersion); - } - } -} diff --git a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader59.java b/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader59.java deleted file mode 100644 index ae8687d07a..0000000000 --- a/compatibility/5.9/storage-engine-adapter/src/main/java17/org/neo4j/internal/recordstorage/InMemoryStorageReader59.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) "Neo4j" - * Neo4j Sweden AB [http://neo4j.com] - * - * This file is part of Neo4j. - * - * Neo4j is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.neo4j.internal.recordstorage; - -import org.eclipse.collections.api.set.primitive.IntSet; -import org.eclipse.collections.impl.set.immutable.primitive.ImmutableIntSetFactoryImpl; -import org.neo4j.common.EntityType; -import org.neo4j.common.TokenNameLookup; -import org.neo4j.counts.CountsAccessor; -import org.neo4j.gds.compat._59.InMemoryNodeCursor; -import org.neo4j.gds.compat._59.InMemoryPropertyCursor; -import org.neo4j.gds.compat._59.InMemoryRelationshipScanCursor; -import org.neo4j.gds.compat._59.InMemoryRelationshipTraversalCursor; -import org.neo4j.gds.core.cypher.CypherGraphStore; -import org.neo4j.internal.schema.ConstraintDescriptor; -import org.neo4j.internal.schema.IndexDescriptor; -import org.neo4j.internal.schema.IndexType; -import org.neo4j.internal.schema.SchemaDescriptor; -import org.neo4j.internal.schema.constraints.IndexBackedConstraintDescriptor; -import org.neo4j.io.pagecache.context.CursorContext; -import org.neo4j.memory.MemoryTracker; -import org.neo4j.storageengine.api.AllNodeScan; -import org.neo4j.storageengine.api.AllRelationshipsScan; -import org.neo4j.storageengine.api.StorageNodeCursor; -import org.neo4j.storageengine.api.StoragePropertyCursor; -import org.neo4j.storageengine.api.StorageReader; -import org.neo4j.storageengine.api.StorageRelationshipScanCursor; -import org.neo4j.storageengine.api.StorageRelationshipTraversalCursor; -import org.neo4j.storageengine.api.StorageSchemaReader; -import org.neo4j.storageengine.api.cursor.StoreCursors; -import org.neo4j.token.TokenHolders; - -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -public class InMemoryStorageReader59 implements StorageReader { - - protected final CypherGraphStore graphStore; - protected final TokenHolders tokenHolders; - protected final CountsAccessor counts; - private final Map, Object> dependantState; - private boolean closed; - - public InMemoryStorageReader59( - CypherGraphStore graphStore, - TokenHolders tokenHolders, - CountsAccessor counts - ) { - this.graphStore = graphStore; - - this.tokenHolders = tokenHolders; - this.counts = counts; - this.dependantState = new ConcurrentHashMap<>(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] changedLabels, - long[] unchangedLabels, - int[] propertyKeyIds, - boolean propertyKeyListIsComplete, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public long relationshipsGetCount(CursorContext cursorTracer) { - return graphStore.relationshipCount(); - } - - @Override - public boolean nodeExists(long id, StoreCursors storeCursors) { - var originalId = graphStore.nodes().toOriginalNodeId(id); - return graphStore.nodes().containsOriginalId(originalId); - } - - @Override - public boolean relationshipExists(long id, StoreCursors storeCursors) { - return true; - } - - @Override - public StorageNodeCursor allocateNodeCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryNodeCursor(graphStore, tokenHolders); - } - - @Override - public StoragePropertyCursor allocatePropertyCursor( - CursorContext cursorContext, StoreCursors storeCursors, MemoryTracker memoryTracker - ) { - return new InMemoryPropertyCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipTraversalCursor allocateRelationshipTraversalCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipTraversalCursor(graphStore, tokenHolders); - } - - @Override - public StorageRelationshipScanCursor allocateRelationshipScanCursor( - CursorContext cursorContext, StoreCursors storeCursors - ) { - return new InMemoryRelationshipScanCursor(graphStore, tokenHolders); - } - - @Override - public IndexDescriptor indexGetForSchemaAndType( - SchemaDescriptor descriptor, IndexType type - ) { - return null; - } - - @Override - public AllRelationshipsScan allRelationshipScan() { - return new AbstractInMemoryAllRelationshipScan() { - @Override - boolean scanRange(AbstractInMemoryRelationshipScanCursor cursor, long start, long stopInclusive) { - return cursor.scanRange(start, stopInclusive); - } - - @Override - public boolean scanBatch(long sizeHint, AbstractInMemoryRelationshipScanCursor cursor) { - return super.scanBatch(sizeHint, cursor); - } - }; - } - - @Override - public Iterator indexGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator indexesGetForRelationshipType(int relationshipType) { - return Collections.emptyIterator(); - } - - @Override - public IndexDescriptor indexGetForName(String name) { - return null; - } - - @Override - public ConstraintDescriptor constraintGetForName(String name) { - return null; - } - - @Override - public boolean indexExists(IndexDescriptor index) { - return false; - } - - @Override - public Iterator indexesGetAll() { - return Collections.emptyIterator(); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int propertyKeyId, EntityType entityType - ) { - return valueIndexesGetRelated(tokens, new int[]{propertyKeyId}, entityType); - } - - @Override - public Collection valueIndexesGetRelated( - long[] tokens, int[] propertyKeyIds, EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] labels, - int propertyKeyId, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public Collection uniquenessConstraintsGetRelated( - long[] tokens, - int[] propertyKeyIds, - EntityType entityType - ) { - return Collections.emptyList(); - } - - @Override - public boolean hasRelatedSchema(long[] labels, int propertyKey, EntityType entityType) { - return false; - } - - @Override - public boolean hasRelatedSchema(int label, EntityType entityType) { - return false; - } - - @Override - public Iterator constraintsGetForSchema(SchemaDescriptor descriptor) { - return Collections.emptyIterator(); - } - - @Override - public boolean constraintExists(ConstraintDescriptor descriptor) { - return false; - } - - @Override - public Iterator constraintsGetForLabel(int labelId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetForRelationshipType(int typeId) { - return Collections.emptyIterator(); - } - - @Override - public Iterator constraintsGetAll() { - return Collections.emptyIterator(); - } - - @Override - public IntSet constraintsGetPropertyTokensForLogicalKey(int token, EntityType entityType) { - return ImmutableIntSetFactoryImpl.INSTANCE.empty(); - } - - @Override - public Long indexGetOwningUniquenessConstraintId(IndexDescriptor index) { - return null; - } - - @Override - public long countsForNode(int labelId, CursorContext cursorContext) { - return counts.nodeCount(labelId, cursorContext); - } - - @Override - public long countsForRelationship(int startLabelId, int typeId, int endLabelId, CursorContext cursorContext) { - return counts.relationshipCount(startLabelId, typeId, endLabelId, cursorContext); - } - - @Override - public long nodesGetCount(CursorContext cursorContext) { - return graphStore.nodeCount(); - } - - @Override - public int labelCount() { - return graphStore.nodes().availableNodeLabels().size(); - } - - @Override - public int propertyKeyCount() { - int nodePropertyCount = graphStore - .schema() - .nodeSchema() - .allProperties() - .size(); - int relPropertyCount = graphStore - .schema() - .relationshipSchema() - .allProperties() - .size(); - return nodePropertyCount + relPropertyCount; - } - - @Override - public int relationshipTypeCount() { - return graphStore.schema().relationshipSchema().availableTypes().size(); - } - - @Override - public T getOrCreateSchemaDependantState(Class type, Function factory) { - return type.cast(dependantState.computeIfAbsent(type, key -> factory.apply(this))); - } - - @Override - public AllNodeScan allNodeScan() { - return new InMemoryNodeScan(); - } - - @Override - public void close() { - assert !closed; - closed = true; - } - - @Override - public StorageSchemaReader schemaSnapshot() { - return this; - } - - @Override - public TokenNameLookup tokenNameLookup() { - return tokenHolders; - } - -} diff --git a/doc/modules/ROOT/pages/installation/supported-neo4j-versions.adoc b/doc/modules/ROOT/pages/installation/supported-neo4j-versions.adoc index 92865c0948..635d339828 100644 --- a/doc/modules/ROOT/pages/installation/supported-neo4j-versions.adoc +++ b/doc/modules/ROOT/pages/installation/supported-neo4j-versions.adoc @@ -16,11 +16,11 @@ If your version of GDS or Neo4j is not listed in the matrix, you should upgrade. | `5.13` | `2.6`, `2.5.1` or later | `5.12` | `2.6`, `2.5` | `5.11` | `2.6`, `2.5` -| `5.10` | `2.6`, `2.5` -| `5.9` | `2.6`, `2.5` -| `5.8` | `2.6`, `2.5` -| `5.7` | `2.6`, `2.5` -| `5.6` | `2.6`, `2.5` +| `5.10` | `2.5` +| `5.9` | `2.5` +| `5.8` | `2.5` +| `5.7` | `2.5` +| `5.6` | `2.5` | `4.4.27` or later | `2.6`, `2.5.3` or later | `4.4.9` - `4.4.26` | `2.6`, `2.5` |=== diff --git a/examples/pregel-bootstrap/build.gradle b/examples/pregel-bootstrap/build.gradle index 9b4baaf81a..5e0e1a573d 100644 --- a/examples/pregel-bootstrap/build.gradle +++ b/examples/pregel-bootstrap/build.gradle @@ -8,7 +8,7 @@ plugins { ext { // Make sure these are the same as your installation of GDS and Neo4j gdsVersion = '2.6.0' - neo4jVersion = '5.10.0' + neo4jVersion = '5.16.0' // Necessary to generate value classes for Pregel configs immutablesVersion = '2.8.1' diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 9582fb89f8..00daff7f03 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -1,11 +1,6 @@ ext { neos = [ '4.4': properties.getOrDefault('neo4jVersion44', '4.4.30'), - '5.6': properties.getOrDefault('neo4jVersion56', '5.6.0'), - '5.7': properties.getOrDefault('neo4jVersion57', '5.7.0'), - '5.8': properties.getOrDefault('neo4jVersion58', '5.8.0'), - '5.9': properties.getOrDefault('neo4jVersion59', '5.9.0'), - '5.10': properties.getOrDefault('neo4jVersion510', '5.10.0'), '5.11': properties.getOrDefault('neo4jVersion511', '5.11.0'), '5.12': properties.getOrDefault('neo4jVersion512', '5.12.0'), '5.13': properties.getOrDefault('neo4jVersion513', '5.13.0'), @@ -19,14 +14,7 @@ ext { neo4j_minor = properties.getOrDefault('neo4jVersion', neo4jDefault).toString().split('\\.')[0..1].join('.') scalas = [ - '4.3': '2.12.13', '4.4': '2.12.13', - '5.0': '2.13.8', - '5.6': '2.13.8', - '5.7': '2.13.10', - '5.8': '2.13.10', - '5.9': '2.13.10', - '5.10': '2.13.10', '5.11': '2.13.11', '5.12': '2.13.11', '5.13': '2.13.11', @@ -38,11 +26,6 @@ ext { log4js = [ '4.4': '2.17.0', - '5.6': '2.19.0', - '5.7': '2.20.0', - '5.8': '2.20.0', - '5.9': '2.20.0', - '5.10': '2.20.0', '5.11': '2.20.0', '5.12': '2.20.0', '5.13': '2.20.0', diff --git a/neo4j-adapter/src/main/java/org/neo4j/gds/compat/Neo4jVersion.java b/neo4j-adapter/src/main/java/org/neo4j/gds/compat/Neo4jVersion.java index 16260c78b0..c06b26be0f 100644 --- a/neo4j-adapter/src/main/java/org/neo4j/gds/compat/Neo4jVersion.java +++ b/neo4j-adapter/src/main/java/org/neo4j/gds/compat/Neo4jVersion.java @@ -28,16 +28,6 @@ public enum Neo4jVersion { V_4_4, - V_5_1, - V_5_2, - V_5_3, - V_5_4, - V_5_5, - V_5_6, - V_5_7, - V_5_8, - V_5_9, - V_5_10, V_5_11, V_5_12, V_5_13, @@ -71,16 +61,6 @@ static Neo4jVersion parse(String version) { return Neo4jVersion.V_4_4; } else if (majorVersion == 5) { switch (minorVersion) { - case 6: - return Neo4jVersion.V_5_6; - case 7: - return Neo4jVersion.V_5_7; - case 8: - return Neo4jVersion.V_5_8; - case 9: - return Neo4jVersion.V_5_9; - case 10: - return Neo4jVersion.V_5_10; case 11: return Neo4jVersion.V_5_11; case 12: @@ -151,16 +131,6 @@ public String toString() { switch (this) { case V_4_4: return "4.4"; - case V_5_6: - return "5.6"; - case V_5_7: - return "5.7"; - case V_5_8: - return "5.8"; - case V_5_9: - return "5.9"; - case V_5_10: - return "5.10"; case V_5_11: return "5.11"; case V_5_12: diff --git a/neo4j-adapter/src/test/java/org/neo4j/gds/compat/Neo4jVersionTest.java b/neo4j-adapter/src/test/java/org/neo4j/gds/compat/Neo4jVersionTest.java index 8cca6e30d8..e018aa6dd5 100644 --- a/neo4j-adapter/src/test/java/org/neo4j/gds/compat/Neo4jVersionTest.java +++ b/neo4j-adapter/src/test/java/org/neo4j/gds/compat/Neo4jVersionTest.java @@ -38,13 +38,6 @@ class Neo4jVersionTest { "4.4.0-drop04, V_4_4", "4.4.0, V_4_4", "4.4.14, V_4_4", - "5.8.0-dev, V_5_8", - "5.9.0-dev, V_5_9", - "5.6.0, V_5_6", - "5.7.0, V_5_7", - "5.8.0, V_5_8", - "5.9.0, V_5_9", - "5.10.0, V_5_10", "5.11.0, V_5_11", "5.12.0, V_5_12", "5.13.0, V_5_13", @@ -92,11 +85,12 @@ void shouldNotRespectVersionOverride() { { "4.4.0-drop04, 4, 4", "4.4.14, 4, 4", - "5.6.0, 5, 6", - "5.7.0, 5, 7", - "5.8.0, 5, 8", - "5.9.0, 5, 9", - "5.10.0, 5, 10", + "5.11.0, 5, 11", + "5.12.0, 5, 12", + "5.13.0, 5, 13", + "5.14.0, 5, 14", + "5.15.0, 5, 15", + "5.16.0, 5, 16", } ) void semanticVersion(String input, int expectedMajor, int expectedMinor) { diff --git a/proc/sysinfo/src/test/java/org/neo4j/gds/SysInfoProcTest.java b/proc/sysinfo/src/test/java/org/neo4j/gds/SysInfoProcTest.java index 693eb1c3ca..80ccfca079 100644 --- a/proc/sysinfo/src/test/java/org/neo4j/gds/SysInfoProcTest.java +++ b/proc/sysinfo/src/test/java/org/neo4j/gds/SysInfoProcTest.java @@ -57,21 +57,6 @@ class SysInfoProcTest extends BaseProcTest { "Neo4j Settings 5.x", "Neo4j Settings 5.x (placeholder)", - "Neo4j 5.6", - "Neo4j 5.6 (placeholder)", - - "Neo4j 5.7", - "Neo4j 5.7 (placeholder)", - - "Neo4j 5.8", - "Neo4j 5.8 (placeholder)", - - "Neo4j 5.9", - "Neo4j 5.9 (placeholder)", - - "Neo4j 5.10", - "Neo4j 5.10 (placeholder)", - "Neo4j 5.11", "Neo4j 5.11 (placeholder)", @@ -146,46 +131,6 @@ void testSysInfoProc() throws IOException { case V_4_4: expectedCompatibilities = Set.of("Neo4j 4.4", "Neo4j Settings 4.4"); break; - case V_5_6: - expectedCompatibilities = Set.of( - "Neo4j Settings 5.x (placeholder)", - "Neo4j Settings 5.x", - "Neo4j 5.6 (placeholder)", - "Neo4j 5.6" - ); - break; - case V_5_7: - expectedCompatibilities = Set.of( - "Neo4j Settings 5.x (placeholder)", - "Neo4j Settings 5.x", - "Neo4j 5.7 (placeholder)", - "Neo4j 5.7" - ); - break; - case V_5_8: - expectedCompatibilities = Set.of( - "Neo4j Settings 5.x (placeholder)", - "Neo4j Settings 5.x", - "Neo4j 5.8 (placeholder)", - "Neo4j 5.8" - ); - break; - case V_5_9: - expectedCompatibilities = Set.of( - "Neo4j Settings 5.x (placeholder)", - "Neo4j Settings 5.x", - "Neo4j 5.9 (placeholder)", - "Neo4j 5.9" - ); - break; - case V_5_10: - expectedCompatibilities = Set.of( - "Neo4j Settings 5.x (placeholder)", - "Neo4j Settings 5.x", - "Neo4j 5.10 (placeholder)", - "Neo4j 5.10" - ); - break; case V_5_11: expectedCompatibilities = Set.of( "Neo4j Settings 5.x (placeholder)", diff --git a/settings.gradle b/settings.gradle index e7770d7925..3e00008483 100644 --- a/settings.gradle +++ b/settings.gradle @@ -155,21 +155,6 @@ project(':neo4j-kernel-adapter-5-common').projectDir = file('compatibility/5-com include('neo4j-kernel-adapter-4.4') project(':neo4j-kernel-adapter-4.4').projectDir = file('compatibility/4.4/neo4j-kernel-adapter') -include('neo4j-kernel-adapter-5.6') -project(':neo4j-kernel-adapter-5.6').projectDir = file('compatibility/5.6/neo4j-kernel-adapter') - -include('neo4j-kernel-adapter-5.7') -project(':neo4j-kernel-adapter-5.7').projectDir = file('compatibility/5.7/neo4j-kernel-adapter') - -include('neo4j-kernel-adapter-5.8') -project(':neo4j-kernel-adapter-5.8').projectDir = file('compatibility/5.8/neo4j-kernel-adapter') - -include('neo4j-kernel-adapter-5.9') -project(':neo4j-kernel-adapter-5.9').projectDir = file('compatibility/5.9/neo4j-kernel-adapter') - -include('neo4j-kernel-adapter-5.10') -project(':neo4j-kernel-adapter-5.10').projectDir = file('compatibility/5.10/neo4j-kernel-adapter') - include('neo4j-kernel-adapter-5.11') project(':neo4j-kernel-adapter-5.11').projectDir = file('compatibility/5.11/neo4j-kernel-adapter') @@ -269,21 +254,6 @@ project(':storage-engine-adapter').projectDir = file('compatibility/common/stora include('storage-engine-adapter-4.4') project(':storage-engine-adapter-4.4').projectDir = file('compatibility/4.4/storage-engine-adapter') -include('storage-engine-adapter-5.6') -project(':storage-engine-adapter-5.6').projectDir = file('compatibility/5.6/storage-engine-adapter') - -include('storage-engine-adapter-5.7') -project(':storage-engine-adapter-5.7').projectDir = file('compatibility/5.7/storage-engine-adapter') - -include('storage-engine-adapter-5.8') -project(':storage-engine-adapter-5.8').projectDir = file('compatibility/5.8/storage-engine-adapter') - -include('storage-engine-adapter-5.9') -project(':storage-engine-adapter-5.9').projectDir = file('compatibility/5.9/storage-engine-adapter') - -include('storage-engine-adapter-5.10') -project(':storage-engine-adapter-5.10').projectDir = file('compatibility/5.10/storage-engine-adapter') - include('storage-engine-adapter-5.11') project(':storage-engine-adapter-5.11').projectDir = file('compatibility/5.11/storage-engine-adapter')