Skip to content

Commit cdac04a

Browse files
authored
Revert "Since Server v4.0 the server agent received in response to the Hello message is unreliable. Instead, since the server and Bolt protocol versions are aligned, we use the protocol version instead for all connections to Server 4.0 and higher (#708) (#718)" (#746)
This reverts commit 31d3495.
1 parent 52480f1 commit cdac04a

File tree

3 files changed

+12
-37
lines changed

3 files changed

+12
-37
lines changed

driver/src/main/java/org/neo4j/driver/internal/handlers/HelloResponseHandler.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,30 +37,20 @@ public class HelloResponseHandler implements ResponseHandler
3737

3838
private final ChannelPromise connectionInitializedPromise;
3939
private final Channel channel;
40-
private final int protocolVersion;
4140

42-
public HelloResponseHandler( ChannelPromise connectionInitializedPromise, int protocolVersion )
41+
public HelloResponseHandler( ChannelPromise connectionInitializedPromise )
4342
{
4443
this.connectionInitializedPromise = connectionInitializedPromise;
4544
this.channel = connectionInitializedPromise.channel();
46-
this.protocolVersion = protocolVersion;
4745
}
4846

4947
@Override
5048
public void onSuccess( Map<String,Value> metadata )
5149
{
5250
try
5351
{
54-
// From Server V4 extracting server from metadata in the success message is unreliable
55-
// so we fix the Server version against the Bolt Protocol version for Server V4 and above.
56-
if ( protocolVersion == 4 )
57-
{
58-
setServerVersion( channel, ServerVersion.v4_0_0 );
59-
}
60-
else
61-
{
62-
setServerVersion( channel, extractNeo4jServerVersion( metadata ) );
63-
}
52+
ServerVersion serverVersion = extractNeo4jServerVersion( metadata );
53+
setServerVersion( channel, serverVersion );
6454

6555
String connectionId = extractConnectionId( metadata );
6656
setConnectionId( channel, connectionId );

driver/src/main/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void initializeChannel( String userAgent, Map<String,Value> authToken, Ch
8080
Channel channel = channelInitializedPromise.channel();
8181

8282
HelloMessage message = new HelloMessage( userAgent, authToken );
83-
HelloResponseHandler handler = new HelloResponseHandler( channelInitializedPromise, version() );
83+
HelloResponseHandler handler = new HelloResponseHandler( channelInitializedPromise );
8484

8585
messageDispatcher( channel ).enqueue( handler );
8686
channel.writeAndFlush( message, channel.voidPromise() );

driver/src/test/java/org/neo4j/driver/internal/handlers/HelloResponseHandlerTest.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.neo4j.driver.internal.async.inbound.InboundMessageDispatcher;
3838
import org.neo4j.driver.internal.async.outbound.OutboundMessageHandler;
3939
import org.neo4j.driver.internal.messaging.v1.MessageFormatV1;
40-
import org.neo4j.driver.internal.util.ServerVersion;
4140

4241
import static org.junit.jupiter.api.Assertions.assertEquals;
4342
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -74,7 +73,7 @@ void tearDown()
7473
void shouldSetServerVersionOnChannel()
7574
{
7675
ChannelPromise channelPromise = channel.newPromise();
77-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
76+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
7877

7978
Map<String,Value> metadata = metadata( anyServerVersion(), "bolt-1" );
8079
handler.onSuccess( metadata );
@@ -87,7 +86,7 @@ void shouldSetServerVersionOnChannel()
8786
void shouldThrowWhenServerVersionNotReturned()
8887
{
8988
ChannelPromise channelPromise = channel.newPromise();
90-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
89+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
9190

9291
Map<String,Value> metadata = metadata( null, "bolt-1" );
9392
assertThrows( UntrustedServerException.class, () -> handler.onSuccess( metadata ) );
@@ -100,7 +99,7 @@ void shouldThrowWhenServerVersionNotReturned()
10099
void shouldThrowWhenServerVersionIsNull()
101100
{
102101
ChannelPromise channelPromise = channel.newPromise();
103-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
102+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
104103

105104
Map<String,Value> metadata = metadata( Values.NULL, "bolt-x" );
106105
assertThrows( UntrustedServerException.class, () -> handler.onSuccess( metadata ) );
@@ -113,7 +112,7 @@ void shouldThrowWhenServerVersionIsNull()
113112
void shouldThrowWhenServerVersionCantBeParsed()
114113
{
115114
ChannelPromise channelPromise = channel.newPromise();
116-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
115+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
117116

118117
Map<String,Value> metadata = metadata( "WrongServerVersion", "bolt-x" );
119118
assertThrows( IllegalArgumentException.class, () -> handler.onSuccess( metadata ) );
@@ -122,25 +121,11 @@ void shouldThrowWhenServerVersionCantBeParsed()
122121
assertTrue( channel.closeFuture().isDone() ); // channel was closed
123122
}
124123

125-
@Test
126-
void shouldUseProtocolVersionForServerVersionWhenConnectedWithBoltV4()
127-
{
128-
ChannelPromise channelPromise = channel.newPromise();
129-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 4 );
130-
131-
// server used in metadata should be ignored
132-
Map<String,Value> metadata = metadata( ServerVersion.vInDev, "bolt-1" );
133-
handler.onSuccess( metadata );
134-
135-
assertTrue( channelPromise.isSuccess() );
136-
assertEquals( ServerVersion.v4_0_0, serverVersion( channel ) );
137-
}
138-
139124
@Test
140125
void shouldSetConnectionIdOnChannel()
141126
{
142127
ChannelPromise channelPromise = channel.newPromise();
143-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
128+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
144129

145130
Map<String,Value> metadata = metadata( anyServerVersion(), "bolt-42" );
146131
handler.onSuccess( metadata );
@@ -153,7 +138,7 @@ void shouldSetConnectionIdOnChannel()
153138
void shouldThrowWhenConnectionIdNotReturned()
154139
{
155140
ChannelPromise channelPromise = channel.newPromise();
156-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
141+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
157142

158143
Map<String,Value> metadata = metadata( anyServerVersion(), null );
159144
assertThrows( IllegalStateException.class, () -> handler.onSuccess( metadata ) );
@@ -166,7 +151,7 @@ void shouldThrowWhenConnectionIdNotReturned()
166151
void shouldThrowWhenConnectionIdIsNull()
167152
{
168153
ChannelPromise channelPromise = channel.newPromise();
169-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
154+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
170155

171156
Map<String,Value> metadata = metadata( anyServerVersion(), Values.NULL );
172157
assertThrows( IllegalStateException.class, () -> handler.onSuccess( metadata ) );
@@ -179,7 +164,7 @@ void shouldThrowWhenConnectionIdIsNull()
179164
void shouldCloseChannelOnFailure() throws Exception
180165
{
181166
ChannelPromise channelPromise = channel.newPromise();
182-
HelloResponseHandler handler = new HelloResponseHandler( channelPromise, 3 );
167+
HelloResponseHandler handler = new HelloResponseHandler( channelPromise );
183168

184169
RuntimeException error = new RuntimeException( "Hi!" );
185170
handler.onFailure( error );

0 commit comments

Comments
 (0)