Skip to content

Commit cd787ed

Browse files
committed
Added support for server on session
1 parent 507dd44 commit cd787ed

File tree

11 files changed

+99
-17
lines changed

11 files changed

+99
-17
lines changed

driver/src/main/java/org/neo4j/driver/internal/InternalSession.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import java.util.concurrent.atomic.AtomicBoolean;
2323

2424
import org.neo4j.driver.internal.spi.Connection;
25-
import org.neo4j.driver.v1.Logger;
2625
import org.neo4j.driver.internal.types.InternalTypeSystem;
26+
import org.neo4j.driver.v1.Logger;
2727
import org.neo4j.driver.v1.Record;
2828
import org.neo4j.driver.v1.Session;
2929
import org.neo4j.driver.v1.Statement;
@@ -144,6 +144,12 @@ public void close()
144144
}
145145
}
146146

147+
@Override
148+
public String server()
149+
{
150+
return connection.server();
151+
}
152+
147153
@Override
148154
public Transaction beginTransaction()
149155
{

driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,4 +228,10 @@ private void markAsInUse()
228228
"do that is to give each thread its own dedicated session." );
229229
}
230230
}
231+
232+
@Override
233+
public String server()
234+
{
235+
return delegate.server();
236+
}
231237
}

driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class SocketConnection implements Connection
4747
private final Queue<Message> pendingMessages = new LinkedList<>();
4848
private final SocketResponseHandler responseHandler;
4949
private AtomicBoolean interrupted = new AtomicBoolean( false );
50+
private final StreamCollector.InitStreamCollector initStreamCollector = new StreamCollector.InitStreamCollector();
5051

5152
private final SocketClient socket;
5253

@@ -70,7 +71,7 @@ public SocketConnection( BoltServerAddress address, SecurityPlan securityPlan, L
7071
@Override
7172
public void init( String clientName, Map<String,Value> authToken )
7273
{
73-
queueMessage( new InitMessage( clientName, authToken ), StreamCollector.INIT );
74+
queueMessage( new InitMessage( clientName, authToken ), initStreamCollector );
7475
sync();
7576
}
7677

@@ -231,4 +232,10 @@ public boolean isInterrupted()
231232
{
232233
return interrupted.get();
233234
}
235+
236+
@Override
237+
public String server()
238+
{
239+
return initStreamCollector.server( );
240+
}
234241
}

driver/src/main/java/org/neo4j/driver/internal/net/SocketResponseHandler.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public void handleFailureMessage( String code, String message )
8484
public void handleSuccessMessage( Map<String,Value> meta )
8585
{
8686
StreamCollector collector = collectors.remove();
87+
collectServer( collector, meta.get( "server" ));
8788
collectFields( collector, meta.get( "fields" ) );
8889
collectType( collector, meta.get( "type" ) );
8990
collectStatistics( collector, meta.get( "stats" ) );
@@ -95,6 +96,14 @@ public void handleSuccessMessage( Map<String,Value> meta )
9596
collector.doneSuccess();
9697
}
9798

99+
private void collectServer( StreamCollector collector, Value server )
100+
{
101+
if (server != null)
102+
{
103+
collector.server( server.asString() );
104+
}
105+
}
106+
98107
private void collectResultAvailableAfter( StreamCollector collector, Value resultAvailableAfter )
99108
{
100109
if (resultAvailableAfter != null)

driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,12 @@ public boolean isInterrupted()
230230
return delegate.isInterrupted();
231231
}
232232

233+
@Override
234+
public String server()
235+
{
236+
return delegate.server();
237+
}
238+
233239
public void dispose()
234240
{
235241
delegate.close();
@@ -280,7 +286,6 @@ private boolean isClientOrTransientError( RuntimeException e )
280286

281287
public long idleTime()
282288
{
283-
long idleTime = clock.millis() - lastUsed;
284-
return idleTime;
289+
return clock.millis() - lastUsed;
285290
}
286291
}

driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public interface Connection extends AutoCloseable
100100
* runnable. This is used in the driver to clean up resources associated with
101101
* the connection, like an open transaction.
102102
*
103-
* @param runnable
103+
* @param runnable To be run on error.
104104
*/
105105
void onError( Runnable runnable );
106106

@@ -117,4 +117,10 @@ public interface Connection extends AutoCloseable
117117
* @return true if the current session statement execution has been interrupted by another thread, otherwise false
118118
*/
119119
boolean isInterrupted();
120+
121+
/**
122+
* Returns the version of the server connected to.
123+
* @return The version of the server connected to.
124+
*/
125+
String server();
120126
}

driver/src/main/java/org/neo4j/driver/internal/spi/StreamCollector.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,27 @@ public void doneIgnored()
5050
}
5151
};
5252

53-
StreamCollector INIT = new NoOperationStreamCollector()
53+
class InitStreamCollector extends NoOperationStreamCollector
5454
{
55+
private String server;
5556
@Override
5657
public void doneIgnored()
5758
{
5859
throw new ClientException(
5960
"Invalid server response message `IGNORED` received for client message `INIT`." );
6061
}
61-
};
62+
63+
@Override
64+
public void server( String server )
65+
{
66+
this.server = server;
67+
}
68+
69+
public String server()
70+
{
71+
return server;
72+
}
73+
}
6274

6375
StreamCollector RESET = new ResetStreamCollector();
6476

@@ -146,16 +158,13 @@ public void doneIgnored()
146158
}
147159

148160
@Override
149-
public void resultAvailableAfter( long l )
150-
{
151-
152-
}
161+
public void resultAvailableAfter( long l ) {}
153162

154163
@Override
155-
public void resultConsumedAfter( long l )
156-
{
164+
public void resultConsumedAfter( long l ) {}
157165

158-
}
166+
@Override
167+
public void server( String server ){}
159168
}
160169

161170
// TODO: This should be modified to simply have head/record/tail methods
@@ -185,5 +194,7 @@ public void resultConsumedAfter( long l )
185194
void resultAvailableAfter( long l );
186195

187196
void resultConsumedAfter( long l );
197+
198+
void server( String server );
188199
}
189200

driver/src/main/java/org/neo4j/driver/internal/summary/SummaryBuilder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ public void resultConsumedAfter( long l )
163163
this.resultConsumedAfter = l;
164164
}
165165

166+
@Override
167+
public void server( String server )
168+
{
169+
// intentionally empty
170+
}
171+
166172
public ResultSummary build()
167173
{
168174
return new ResultSummary()

driver/src/main/java/org/neo4j/driver/v1/Session.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,10 @@ public interface Session extends Resource, StatementRunner
7575
*/
7676
@Override
7777
void close();
78+
79+
/**
80+
* Returns a string telling which version of the server the session is connected to.
81+
* @return The server version of <code>null</code> if not available.
82+
*/
83+
String server();
7884
}

driver/src/test/java/org/neo4j/driver/v1/integration/SessionIT.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static org.hamcrest.CoreMatchers.equalTo;
3535
import static org.hamcrest.Matchers.greaterThan;
3636
import static org.junit.Assert.assertFalse;
37+
import static org.junit.Assert.assertNotNull;
3738
import static org.junit.Assert.assertThat;
3839
import static org.junit.Assert.assertTrue;
3940
import static org.junit.Assert.fail;
@@ -48,7 +49,7 @@ public class SessionIT
4849
public void shouldKnowSessionIsClosed() throws Throwable
4950
{
5051
// Given
51-
try( Driver driver = GraphDatabase.driver( neo4j.uri() ); )
52+
try( Driver driver = GraphDatabase.driver( neo4j.uri() ) )
5253
{
5354
Session session = driver.session();
5455

@@ -173,6 +174,19 @@ public void shouldKillLongStreamingResult() throws Throwable
173174
}
174175
}
175176

177+
@Test
178+
public void shouldShowServerVersion() throws Throwable
179+
{
180+
// Given
181+
try( Driver driver = GraphDatabase.driver( neo4j.uri() ) )
182+
{
183+
try ( Session session = driver.session() )
184+
{
185+
assertNotNull( session.server() );
186+
}
187+
}
188+
}
189+
176190
private void resetSessionAfterTimeout( final Session session, final int timeout )
177191
{
178192
new Thread( new Runnable()

driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
import java.util.Map;
2525

2626
import org.neo4j.driver.v1.Record;
27-
import org.neo4j.driver.v1.StatementResult;
2827
import org.neo4j.driver.v1.Session;
28+
import org.neo4j.driver.v1.StatementResult;
2929
import org.neo4j.driver.v1.Transaction;
30-
import org.neo4j.driver.v1.types.TypeSystem;
3130
import org.neo4j.driver.v1.Value;
31+
import org.neo4j.driver.v1.types.TypeSystem;
3232

3333
/**
3434
* A little utility for integration testing, this provides tests with a session they can work with.
@@ -94,6 +94,12 @@ public void close()
9494
throw new UnsupportedOperationException( "Disallowed on this test session" );
9595
}
9696

97+
@Override
98+
public String server()
99+
{
100+
return realSession.server();
101+
}
102+
97103
@Override
98104
public Transaction beginTransaction()
99105
{

0 commit comments

Comments
 (0)