use of org.neo4j.bolt.v41.messaging.RoutingContext in project neo4j by neo4j.
the class ConnectedState method process.
@Override
public BoltStateMachineState process(RequestMessage message, StateMachineContext context) throws BoltConnectionFatality {
assertInitialized();
if (message instanceof HelloMessage) {
HelloMessage helloMessage = (HelloMessage) message;
String userAgent = helloMessage.userAgent();
Map<String, Object> authToken = helloMessage.authToken();
if (processAuthentication(userAgent, authToken, context, new RoutingContext(false, Collections.emptyMap()))) {
context.resolveDefaultDatabase();
context.connectionState().onMetadata(CONNECTION_ID_KEY, Values.utf8Value(context.connectionId()));
context.connectionState().onMetadata("hints", connectionHints);
return readyState;
} else {
return null;
}
}
return null;
}
use of org.neo4j.bolt.v41.messaging.RoutingContext in project neo4j by neo4j.
the class TestFabricGraphDatabaseService method beginTransactionInternal.
@Override
protected InternalTransaction beginTransactionInternal(KernelTransaction.Type type, LoginContext loginContext, ClientConnectionInfo connectionInfo, long timeoutMillis, Consumer<Status> terminationCallback, TransactionExceptionMapper transactionExceptionMapper) {
var databaseService = boltFabricDatabaseServiceSupplier.get();
var boltTransaction = databaseService.beginTransaction(type, loginContext, connectionInfo, List.of(), Duration.ofMillis(timeoutMillis), AccessMode.WRITE, Map.of(), new RoutingContext(false, Map.of()));
var internalTransaction = forceKernelTxCreation(boltTransaction);
return new TestFabricTransaction(boltTransaction, internalTransaction);
}
use of org.neo4j.bolt.v41.messaging.RoutingContext in project neo4j by neo4j.
the class FabricExecutor method run.
public StatementResult run(FabricTransaction fabricTransaction, String statement, MapValue parameters) {
StatementLifecycle lifecycle = statementLifecycles.create(fabricTransaction.getTransactionInfo(), statement, parameters);
lifecycle.startProcessing();
fabricTransaction.setLastSubmittedStatement(lifecycle);
try {
String defaultGraphName = fabricTransaction.getTransactionInfo().getSessionDatabaseId().name();
FabricPlanner.PlannerInstance plannerInstance = planner.instance(statement, parameters, defaultGraphName);
UseEvaluation.Instance useEvaluator = useEvaluation.instance(statement);
FabricPlan plan = plannerInstance.plan();
Fragment query = plan.query();
lifecycle.doneFabricProcessing(plan);
AccessMode accessMode = fabricTransaction.getTransactionInfo().getAccessMode();
RoutingContext routingContext = fabricTransaction.getTransactionInfo().getRoutingContext();
if (plan.debugOptions().logPlan()) {
log.debug(String.format("Fabric plan: %s", Fragment.pretty().asString(query)));
}
var statementResult = fabricTransaction.execute(ctx -> {
FabricStatementExecution execution;
if (plan.debugOptions().logRecords()) {
execution = new FabricLoggingStatementExecution(plan, plannerInstance, useEvaluator, parameters, accessMode, routingContext, ctx, log, lifecycle, dataStreamConfig);
} else {
execution = new FabricStatementExecution(plan, plannerInstance, useEvaluator, parameters, accessMode, routingContext, ctx, lifecycle, dataStreamConfig);
}
return execution.run();
});
var resultWithErrorMapping = withErrorMapping(statementResult, FabricSecondaryException.class, FabricSecondaryException::getPrimaryException);
return new FabricExecutionStatementResultImpl(resultWithErrorMapping, failure -> rollbackOnFailure(fabricTransaction, failure));
} catch (RuntimeException e) {
lifecycle.endFailure(e);
rollbackOnFailure(fabricTransaction, e);
throw e;
}
}
use of org.neo4j.bolt.v41.messaging.RoutingContext in project neo4j by neo4j.
the class HelloMessageDecoderTest method testShouldDecodeAuthToken.
@Override
protected void testShouldDecodeAuthToken(Map<String, Object> authToken) throws Exception {
Neo4jPack neo4jPack = newNeo4jPack();
authToken.put("user_agent", "My Driver");
HelloMessage originalMessage = new HelloMessage(authToken, new RoutingContext(true, Collections.emptyMap()), authToken);
PackedInputArray input = new PackedInputArray(encode(neo4jPack, originalMessage));
Neo4jPack.Unpacker unpacker = neo4jPack.newUnpacker(input);
// these two steps are executed before decoding in order to select a correct decoder
unpacker.unpackStructHeader();
unpacker.unpackStructSignature();
RequestMessage deserializedMessage = decoder.decode(unpacker);
assertHelloMessageMatches(originalMessage, deserializedMessage);
}
use of org.neo4j.bolt.v41.messaging.RoutingContext in project neo4j by neo4j.
the class HelloMessageDecoderTest method shouldThrowExceptionOnIncorrectRoutingContextFormat.
@Test
public void shouldThrowExceptionOnIncorrectRoutingContextFormat() throws Exception {
Map<String, Object> meta = new HashMap<>();
// incorrect Map type params
Map<String, Integer> routingContext = new HashMap<>();
routingContext.put("policy", 4);
Neo4jPack neo4jPack = newNeo4jPack();
meta.put("user_agent", "My Driver");
meta.put("routing", routingContext);
HelloMessage originalMessage = new HelloMessage(meta, null, meta);
PackedInputArray input = new PackedInputArray(encode(neo4jPack, originalMessage));
Neo4jPack.Unpacker unpacker = neo4jPack.newUnpacker(input);
// these two steps are executed before decoding in order to select a correct decoder
unpacker.unpackStructHeader();
unpacker.unpackStructSignature();
BoltIOException ex = assertThrows(BoltIOException.class, () -> decoder.decode(unpacker));
assertEquals("Routing information in the HELLO message must be a map with string keys and string values.", ex.getMessage());
}
Aggregations