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.
*/
public class BoltChannel implements AutoCloseable, TrackedNetworkConnection, BoltConnectionDescriptor
public class BoltChannel implements TrackedNetworkConnection
{
private final String id;
private final long connectTime;
private final String connector;
private final Channel rawChannel;

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

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

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

@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
Expand All @@ -110,7 +118,8 @@ public String toString()
", connectTime=" + connectTime +
", connector='" + connector + '\'' +
", 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.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.logging.internal.LogService;
import org.neo4j.udc.UsageData;

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

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

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

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

return Duration.ofMillis( bookmarkReadyTimeout );
}

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

import java.util.Map;

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

public interface BoltStateMachineSPI
{
BoltConnectionDescriptor connectionDescriptor();

TransactionStateMachineSPI transactionSpi();

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

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

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

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

void validateTransaction() throws KernelException;

void setQuerySource( BoltQuerySource querySource );

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

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

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 );
}
Expand Up @@ -47,9 +47,9 @@ public BoltStateMachineV1Context( BoltStateMachine machine, BoltChannel boltChan
}

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

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

import org.neo4j.bolt.runtime.BoltConnectionFatality;
import org.neo4j.bolt.runtime.BoltQuerySource;
import org.neo4j.bolt.runtime.StateMachineContext;
import org.neo4j.bolt.runtime.StatementProcessor;
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 );
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 );

if ( authResult.credentialsExpired() )
Expand All @@ -56,12 +55,4 @@ public static boolean processAuthentication( String userAgent, Map<String,Object
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 org.neo4j.bolt.BoltConnectionDescriptor;
import org.neo4j.bolt.runtime.BoltStateMachineSPI;
import org.neo4j.bolt.runtime.Neo4jError;
import org.neo4j.bolt.runtime.TransactionStateMachineSPI;
Expand All @@ -36,30 +35,22 @@
public class BoltStateMachineV1SPI implements BoltStateMachineSPI
{
public static final String BOLT_SERVER_VERSION_PREFIX = "Neo4j/";
private final BoltConnectionDescriptor connectionDescriptor;
private final UsageData usageData;
private final ErrorReporter errorReporter;
private final Authentication authentication;
private final String version;
private final TransactionStateMachineSPI transactionSpi;

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

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

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

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

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

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

BoltQuerySource querySource;
BoltResultHandle currentResultHandle;

private MutableTransactionState( AuthenticationResult authenticationResult, Clock clock )
Expand Down

0 comments on commit 6822fe2

Please sign in to comment.