Skip to content

Commit f244d7d

Browse files
Use CommandCreationContext in TokenManager
1 parent 549ca28 commit f244d7d

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

cypher/api/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/AbstractInMemoryCommandCreationContext.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ public abstract class AbstractInMemoryCommandCreationContext implements CommandC
2929
private final AtomicLong schemaTokens;
3030
private final AtomicInteger propertyTokens;
3131
private final AtomicInteger labelTokens;
32+
private final AtomicInteger typeTokens;
3233

3334
public AbstractInMemoryCommandCreationContext() {
34-
schemaTokens = new AtomicLong(0);
35-
propertyTokens = new AtomicInteger(0);
36-
labelTokens = new AtomicInteger(0);
35+
this.schemaTokens = new AtomicLong(0);
36+
this.propertyTokens = new AtomicInteger(0);
37+
this.labelTokens = new AtomicInteger(0);
38+
this.typeTokens = new AtomicInteger(0);
3739
}
3840

3941
@Override
@@ -58,7 +60,7 @@ public int reservePropertyKeyTokenId() {
5860

5961
@Override
6062
public int reserveRelationshipTypeTokenId() {
61-
throw new UnsupportedOperationException("Creating relationship types is not supported");
63+
return typeTokens.getAndIncrement();
6264
}
6365

6466
@Override

cypher/api/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/AbstractInMemoryStorageEngine.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.neo4j.kernel.lifecycle.LifecycleAdapter;
3838
import org.neo4j.lock.LockGroup;
3939
import org.neo4j.lock.LockService;
40+
import org.neo4j.memory.EmptyMemoryTracker;
4041
import org.neo4j.memory.MemoryTracker;
4142
import org.neo4j.storageengine.api.CommandCreationContext;
4243
import org.neo4j.storageengine.api.CommandStream;
@@ -84,7 +85,12 @@ public AbstractInMemoryStorageEngine(
8485
this.txStateVisitor = txStateVisitorFn.apply(graphStore, tokenHolders);
8586
this.commandCreationContextSupplier = commandCreationContextSupplier;
8687
this.storageReaderFn = storageReaderFn;
87-
this.tokenManager = new TokenManager(tokenHolders, txStateVisitor, graphStore);
88+
this.tokenManager = new TokenManager(
89+
tokenHolders,
90+
txStateVisitor,
91+
graphStore,
92+
newCommandCreationContext(EmptyMemoryTracker.INSTANCE)
93+
);
8894
this.countsStore = countsStoreFn.apply(graphStore, tokenHolders);
8995
this.metadataProvider = metadataProvider;
9096
}

cypher/api/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/TokenManager.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,36 @@
1919
*/
2020
package org.neo4j.gds.compat;
2121

22-
import org.apache.commons.lang3.mutable.MutableInt;
2322
import org.neo4j.exceptions.KernelException;
2423
import org.neo4j.gds.core.cypher.CypherGraphStore;
2524
import org.neo4j.gds.storageengine.InMemoryTransactionStateVisitor;
26-
import org.neo4j.kernel.lifecycle.LifecycleAdapter;
25+
import org.neo4j.storageengine.api.CommandCreationContext;
2726
import org.neo4j.token.TokenHolders;
2827
import org.neo4j.token.api.NamedToken;
2928

3029
import java.util.HashSet;
3130

32-
class TokenManager extends LifecycleAdapter implements CypherGraphStore.StateVisitor {
31+
class TokenManager implements CypherGraphStore.StateVisitor {
3332

3433
private final TokenHolders tokenHolders;
3534
private final InMemoryTransactionStateVisitor transactionStateVisitor;
3635
private final CypherGraphStore graphStore;
36+
private final CommandCreationContext commandCreationContext;
3737

3838
TokenManager(
3939
TokenHolders tokenHolders,
4040
InMemoryTransactionStateVisitor transactionStateVisitor,
41-
CypherGraphStore graphStore
41+
CypherGraphStore graphStore,
42+
CommandCreationContext commandCreationContext
4243
) {
4344
this.tokenHolders = tokenHolders;
4445
this.transactionStateVisitor = transactionStateVisitor;
4546
this.graphStore = graphStore;
47+
this.commandCreationContext = commandCreationContext;
4648

4749
init();
4850
}
4951

50-
@Override
5152
public void init() {
5253
initializeTokensFromGraphStore();
5354
graphStore.initialize(tokenHolders);
@@ -106,29 +107,26 @@ private void initializeTokensFromGraphStore() {
106107
// When this method is called there is no kernel available
107108
// which is needed to use the `getOrCreate` method on
108109
// the `TokenHolders`
109-
var labelCounter = new MutableInt(0);
110-
var typeCounter = new MutableInt(0);
111-
var propertyCounter = new MutableInt(0);
112110

113111
var propertyKeys = new HashSet<>(graphStore.nodePropertyKeys());
114112
propertyKeys.addAll(graphStore.relationshipPropertyKeys());
115113
propertyKeys.forEach(propertyKey ->
116114
tokenHolders
117115
.propertyKeyTokens()
118-
.addToken(new NamedToken(propertyKey, propertyCounter.getAndIncrement()))
116+
.addToken(new NamedToken(propertyKey, commandCreationContext.reservePropertyKeyTokenId()))
119117
);
120118

121119
graphStore
122120
.nodeLabels()
123121
.forEach(nodeLabel -> tokenHolders
124122
.labelTokens()
125-
.addToken(new NamedToken(nodeLabel.name(), labelCounter.getAndIncrement())));
123+
.addToken(new NamedToken(nodeLabel.name(), commandCreationContext.reserveLabelTokenId())));
126124

127125
graphStore
128126
.relationshipTypes()
129127
.forEach(relType -> tokenHolders
130128
.relationshipTypeTokens()
131-
.addToken(new NamedToken(relType.name(), typeCounter.getAndIncrement())));
129+
.addToken(new NamedToken(relType.name(), commandCreationContext.reserveRelationshipTypeTokenId())));
132130
}
133131

134132

0 commit comments

Comments
 (0)