Skip to content

Commit

Permalink
Simplify creation of bolt connection info
Browse files Browse the repository at this point in the history
Create it directly from a `BoltChannel` and skip creation of
intermediate DTOs. Make `BoltChannel` implement less interfaces.
  • Loading branch information
lutovich committed Oct 12, 2018
1 parent bba3cce commit 6822fe2
Show file tree
Hide file tree
Showing 28 changed files with 275 additions and 398 deletions.
23 changes: 16 additions & 7 deletions community/bolt/src/main/java/org/neo4j/bolt/BoltChannel.java
Expand Up @@ -28,14 +28,15 @@
/** /**
* A channel through which Bolt messaging can occur. * A channel through which Bolt messaging can occur.
*/ */
public class BoltChannel implements AutoCloseable, TrackedNetworkConnection, BoltConnectionDescriptor public class BoltChannel implements TrackedNetworkConnection
{ {
private final String id; private final String id;
private final long connectTime; private final long connectTime;
private final String connector; private final String connector;
private final Channel rawChannel; private final Channel rawChannel;


private volatile String user; private volatile String username;
private volatile String userAgent;


public BoltChannel( String id, String connector, Channel rawChannel ) public BoltChannel( String id, String connector, Channel rawChannel )
{ {
Expand Down Expand Up @@ -81,15 +82,22 @@ public SocketAddress clientAddress()
} }


@Override @Override
public String user() public String username()
{ {
return user; return username;
} }


@Override @Override
public void updateUser( String user ) public String userAgent()
{ {
this.user = user; return userAgent;
}

@Override
public void updateUser( String username, String userAgent )
{
this.username = username;
this.userAgent = userAgent;
} }


@Override @Override
Expand All @@ -110,7 +118,8 @@ public String toString()
", connectTime=" + connectTime + ", connectTime=" + connectTime +
", connector='" + connector + '\'' + ", connector='" + connector + '\'' +
", rawChannel=" + rawChannel + ", rawChannel=" + rawChannel +
", user='" + user + '\'' + ", username='" + username + '\'' +
", userAgent='" + userAgent + '\'' +
'}'; '}';
} }
} }

This file was deleted.

This file was deleted.

Expand Up @@ -35,6 +35,7 @@
import org.neo4j.dbms.database.DatabaseManager; import org.neo4j.dbms.database.DatabaseManager;
import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.logging.internal.LogService; import org.neo4j.logging.internal.LogService;
import org.neo4j.udc.UsageData; import org.neo4j.udc.UsageData;


Expand Down Expand Up @@ -79,19 +80,15 @@ else if ( protocolVersion == BoltProtocolV3.VERSION )


private BoltStateMachine newStateMachineV1( BoltChannel boltChannel ) private BoltStateMachine newStateMachineV1( BoltChannel boltChannel )
{ {
TransactionStateMachineSPI transactionSPI = TransactionStateMachineSPI transactionSPI = new TransactionStateMachineV1SPI( getActiveDatabase(), boltChannel, getAwaitDuration(), clock );
new TransactionStateMachineV1SPI( databaseManager.getDatabaseFacade( activeDatabaseName ).get(), BoltStateMachineSPI boltSPI = new BoltStateMachineV1SPI( usageData, logging, authentication, transactionSPI );
getAwaitDuration(), clock );
BoltStateMachineSPI boltSPI = new BoltStateMachineV1SPI( boltChannel, usageData, logging, authentication, transactionSPI );
return new BoltStateMachineV1( boltSPI, boltChannel, clock ); return new BoltStateMachineV1( boltSPI, boltChannel, clock );
} }


private BoltStateMachine newStateMachineV3( BoltChannel boltChannel ) private BoltStateMachine newStateMachineV3( BoltChannel boltChannel )
{ {
TransactionStateMachineSPI transactionSPI = TransactionStateMachineSPI transactionSPI = new TransactionStateMachineV3SPI( getActiveDatabase(), boltChannel, getAwaitDuration(), clock );
new TransactionStateMachineV3SPI( databaseManager.getDatabaseFacade( activeDatabaseName ).get(), BoltStateMachineSPI boltSPI = new BoltStateMachineV1SPI( usageData, logging, authentication, transactionSPI );
getAwaitDuration(), clock );
BoltStateMachineSPI boltSPI = new BoltStateMachineV1SPI( boltChannel, usageData, logging, authentication, transactionSPI );
return new BoltStateMachineV3( boltSPI, boltChannel, clock ); return new BoltStateMachineV3( boltSPI, boltChannel, clock );
} }


Expand All @@ -101,4 +98,9 @@ private Duration getAwaitDuration()


return Duration.ofMillis( bookmarkReadyTimeout ); return Duration.ofMillis( bookmarkReadyTimeout );
} }

private GraphDatabaseFacade getActiveDatabase()
{
return databaseManager.getDatabaseFacade( activeDatabaseName ).get();
}
} }
Expand Up @@ -21,14 +21,11 @@


import java.util.Map; import java.util.Map;


import org.neo4j.bolt.BoltConnectionDescriptor;
import org.neo4j.bolt.security.auth.AuthenticationException; import org.neo4j.bolt.security.auth.AuthenticationException;
import org.neo4j.bolt.security.auth.AuthenticationResult; import org.neo4j.bolt.security.auth.AuthenticationResult;


public interface BoltStateMachineSPI public interface BoltStateMachineSPI
{ {
BoltConnectionDescriptor connectionDescriptor();

TransactionStateMachineSPI transactionSpi(); TransactionStateMachineSPI transactionSpi();


void reportError( Neo4jError err ); void reportError( Neo4jError err );
Expand Down
Expand Up @@ -23,7 +23,7 @@


public interface StateMachineContext public interface StateMachineContext
{ {
void authenticatedAsUser( String user ); void authenticatedAsUser( String username, String userAgent );


void handleFailure( Throwable cause, boolean fatal ) throws BoltConnectionFatality; void handleFailure( Throwable cause, boolean fatal ) throws BoltConnectionFatality;


Expand Down
Expand Up @@ -54,8 +54,6 @@ public interface StatementProcessor


void validateTransaction() throws KernelException; void validateTransaction() throws KernelException;


void setQuerySource( BoltQuerySource querySource );

StatementProcessor EMPTY = new StatementProcessor() StatementProcessor EMPTY = new StatementProcessor()
{ {
@Override @Override
Expand Down Expand Up @@ -127,10 +125,5 @@ public boolean hasOpenStatement()
public void validateTransaction() throws KernelException public void validateTransaction() throws KernelException
{ {
} }

@Override
public void setQuerySource( BoltQuerySource querySource )
{
}
}; };
} }
Expand Up @@ -41,6 +41,6 @@ public interface TransactionStateMachineSPI


boolean isPeriodicCommit( String query ); boolean isPeriodicCommit( String query );


BoltResultHandle executeQuery( BoltQuerySource querySource, LoginContext loginContext, String statement, MapValue params, Duration txTimeout, BoltResultHandle executeQuery( LoginContext loginContext, String statement, MapValue params, Duration txTimeout,
Map<String,Object> txMetaData ); Map<String,Object> txMetaData );
} }
Expand Up @@ -47,9 +47,9 @@ public BoltStateMachineV1Context( BoltStateMachine machine, BoltChannel boltChan
} }


@Override @Override
public void authenticatedAsUser( String user ) public void authenticatedAsUser( String username, String userAgent )
{ {
boltChannel.updateUser( user ); boltChannel.updateUser( username, userAgent );
} }


@Override @Override
Expand Down
Expand Up @@ -22,7 +22,6 @@
import java.util.Map; import java.util.Map;


import org.neo4j.bolt.runtime.BoltConnectionFatality; import org.neo4j.bolt.runtime.BoltConnectionFatality;
import org.neo4j.bolt.runtime.BoltQuerySource;
import org.neo4j.bolt.runtime.StateMachineContext; import org.neo4j.bolt.runtime.StateMachineContext;
import org.neo4j.bolt.runtime.StatementProcessor; import org.neo4j.bolt.runtime.StatementProcessor;
import org.neo4j.bolt.security.auth.AuthenticationResult; import org.neo4j.bolt.security.auth.AuthenticationResult;
Expand All @@ -36,9 +35,9 @@ public static boolean processAuthentication( String userAgent, Map<String,Object
{ {
AuthenticationResult authResult = context.boltSpi().authenticate( authToken ); AuthenticationResult authResult = context.boltSpi().authenticate( authToken );
String username = authResult.getLoginContext().subject().username(); String username = authResult.getLoginContext().subject().username();
context.authenticatedAsUser( username ); context.authenticatedAsUser( username, userAgent );


StatementProcessor statementProcessor = newStatementProcessor( username, userAgent, authResult, context ); StatementProcessor statementProcessor = new TransactionStateMachine( context.boltSpi().transactionSpi(), authResult, context.clock() );
context.connectionState().setStatementProcessor( statementProcessor ); context.connectionState().setStatementProcessor( statementProcessor );


if ( authResult.credentialsExpired() ) if ( authResult.credentialsExpired() )
Expand All @@ -56,12 +55,4 @@ public static boolean processAuthentication( String userAgent, Map<String,Object
return false; return false;
} }
} }

private static StatementProcessor newStatementProcessor( String username, String userAgent, AuthenticationResult authResult,
StateMachineContext context )
{
TransactionStateMachine statementProcessor = new TransactionStateMachine( context.boltSpi().transactionSpi(), authResult, context.clock() );
statementProcessor.setQuerySource( new BoltQuerySource( username, userAgent, context.boltSpi().connectionDescriptor() ) );
return statementProcessor;
}
} }
Expand Up @@ -21,7 +21,6 @@


import java.util.Map; import java.util.Map;


import org.neo4j.bolt.BoltConnectionDescriptor;
import org.neo4j.bolt.runtime.BoltStateMachineSPI; import org.neo4j.bolt.runtime.BoltStateMachineSPI;
import org.neo4j.bolt.runtime.Neo4jError; import org.neo4j.bolt.runtime.Neo4jError;
import org.neo4j.bolt.runtime.TransactionStateMachineSPI; import org.neo4j.bolt.runtime.TransactionStateMachineSPI;
Expand All @@ -36,30 +35,22 @@
public class BoltStateMachineV1SPI implements BoltStateMachineSPI public class BoltStateMachineV1SPI implements BoltStateMachineSPI
{ {
public static final String BOLT_SERVER_VERSION_PREFIX = "Neo4j/"; public static final String BOLT_SERVER_VERSION_PREFIX = "Neo4j/";
private final BoltConnectionDescriptor connectionDescriptor;
private final UsageData usageData; private final UsageData usageData;
private final ErrorReporter errorReporter; private final ErrorReporter errorReporter;
private final Authentication authentication; private final Authentication authentication;
private final String version; private final String version;
private final TransactionStateMachineSPI transactionSpi; private final TransactionStateMachineSPI transactionSpi;


public BoltStateMachineV1SPI( BoltConnectionDescriptor connectionDescriptor, UsageData usageData, LogService logging, public BoltStateMachineV1SPI( UsageData usageData, LogService logging,
Authentication authentication, TransactionStateMachineSPI transactionStateMachineSPI ) Authentication authentication, TransactionStateMachineSPI transactionStateMachineSPI )
{ {
this.connectionDescriptor = connectionDescriptor;
this.usageData = usageData; this.usageData = usageData;
this.errorReporter = new ErrorReporter( logging ); this.errorReporter = new ErrorReporter( logging );
this.authentication = authentication; this.authentication = authentication;
this.transactionSpi = transactionStateMachineSPI; this.transactionSpi = transactionStateMachineSPI;
this.version = BOLT_SERVER_VERSION_PREFIX + Version.getNeo4jVersion(); this.version = BOLT_SERVER_VERSION_PREFIX + Version.getNeo4jVersion();
} }


@Override
public BoltConnectionDescriptor connectionDescriptor()
{
return connectionDescriptor;
}

@Override @Override
public TransactionStateMachineSPI transactionSpi() public TransactionStateMachineSPI transactionSpi()
{ {
Expand Down
Expand Up @@ -24,7 +24,6 @@
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;


import org.neo4j.bolt.runtime.BoltQuerySource;
import org.neo4j.bolt.runtime.BoltResult; import org.neo4j.bolt.runtime.BoltResult;
import org.neo4j.bolt.runtime.BoltResultHandle; import org.neo4j.bolt.runtime.BoltResultHandle;
import org.neo4j.bolt.runtime.StatementMetadata; import org.neo4j.bolt.runtime.StatementMetadata;
Expand Down Expand Up @@ -246,12 +245,6 @@ public boolean hasTransaction()
return state == State.EXPLICIT_TRANSACTION; return state == State.EXPLICIT_TRANSACTION;
} }


@Override
public void setQuerySource( BoltQuerySource querySource )
{
this.ctx.querySource = querySource;
}

enum State enum State
{ {
AUTO_COMMIT AUTO_COMMIT
Expand Down Expand Up @@ -303,7 +296,7 @@ void execute( MutableTransactionState ctx, TransactionStateMachineSPI spi, Strin
boolean failed = true; boolean failed = true;
try try
{ {
BoltResultHandle resultHandle = spi.executeQuery( ctx.querySource, ctx.loginContext, statement, params, txTimeout, txMetadata ); BoltResultHandle resultHandle = spi.executeQuery( ctx.loginContext, statement, params, txTimeout, txMetadata );
startExecution( ctx, resultHandle ); startExecution( ctx, resultHandle );
failed = false; failed = false;
} }
Expand Down Expand Up @@ -388,8 +381,7 @@ State run( MutableTransactionState ctx, TransactionStateMachineSPI spi, String s
} }
else else
{ {
BoltResultHandle resultHandle = BoltResultHandle resultHandle = spi.executeQuery( ctx.loginContext, statement, params, null, null /*ignored in explict tx run*/ );
spi.executeQuery( ctx.querySource, ctx.loginContext, statement, params, null, null /*ignored in explict tx run*/ );
startExecution( ctx, resultHandle ); startExecution( ctx, resultHandle );
return EXPLICIT_TRANSACTION; return EXPLICIT_TRANSACTION;
} }
Expand Down Expand Up @@ -566,7 +558,6 @@ public String[] fieldNames()
} }
}; };


BoltQuerySource querySource;
BoltResultHandle currentResultHandle; BoltResultHandle currentResultHandle;


private MutableTransactionState( AuthenticationResult authenticationResult, Clock clock ) private MutableTransactionState( AuthenticationResult authenticationResult, Clock clock )
Expand Down

0 comments on commit 6822fe2

Please sign in to comment.