2121import java .util .List ;
2222
2323import org .neo4j .driver .internal .net .BoltServerAddress ;
24+ import org .neo4j .driver .v1 .AccessMode ;
2425import org .neo4j .driver .v1 .Record ;
2526import org .neo4j .driver .v1 .StatementResult ;
2627import org .neo4j .driver .v1 .exceptions .ClientException ;
2728import org .neo4j .driver .v1 .exceptions .ConnectionFailureException ;
2829import org .neo4j .driver .v1 .exceptions .NoSuchRecordException ;
29- import org .neo4j .driver .v1 .exceptions .SessionExpiredException ;
3030import org .neo4j .driver .v1 .summary .ResultSummary ;
3131import org .neo4j .driver .v1 .util .Function ;
3232
33+ import static java .lang .String .format ;
34+
35+ import static org .neo4j .driver .internal .ClusteredNetworkSession .filterFailureToWrite ;
36+ import static org .neo4j .driver .internal .ClusteredNetworkSession .sessionExpired ;
37+
3338public class ClusteredStatementResult implements StatementResult
3439{
3540 private final StatementResult delegate ;
41+ private final AccessMode mode ;
3642 private final BoltServerAddress address ;
3743 private final ClusteredErrorHandler onError ;
3844
39- ClusteredStatementResult ( StatementResult delegate , BoltServerAddress address , ClusteredErrorHandler onError )
45+ ClusteredStatementResult ( StatementResult delegate , AccessMode mode , BoltServerAddress address ,
46+ ClusteredErrorHandler onError )
4047 {
4148 this .delegate = delegate ;
49+ this .mode = mode ;
4250 this .address = address ;
4351 this .onError = onError ;
4452 }
@@ -52,18 +60,11 @@ public List<String> keys()
5260 }
5361 catch ( ConnectionFailureException e )
5462 {
55- throw sessionExpired ( e );
63+ throw sessionExpired ( e , onError , address );
5664 }
5765 catch ( ClientException e )
5866 {
59- if ( isFailedToWrite ( e ) )
60- {
61- throw failedWrite ();
62- }
63- else
64- {
65- throw e ;
66- }
67+ throw filterFailureToWrite ( e , mode , onError , address );
6768 }
6869 }
6970
@@ -76,18 +77,11 @@ public boolean hasNext()
7677 }
7778 catch ( ConnectionFailureException e )
7879 {
79- throw sessionExpired ( e );
80+ throw sessionExpired ( e , onError , address );
8081 }
8182 catch ( ClientException e )
8283 {
83- if ( isFailedToWrite ( e ) )
84- {
85- throw failedWrite ();
86- }
87- else
88- {
89- throw e ;
90- }
84+ throw filterFailureToWrite ( e , mode , onError , address );
9185 }
9286 }
9387
@@ -100,18 +94,11 @@ public Record next()
10094 }
10195 catch ( ConnectionFailureException e )
10296 {
103- throw sessionExpired ( e );
97+ throw sessionExpired ( e , onError , address );
10498 }
10599 catch ( ClientException e )
106100 {
107- if ( isFailedToWrite ( e ) )
108- {
109- throw failedWrite ();
110- }
111- else
112- {
113- throw e ;
114- }
101+ throw filterFailureToWrite ( e , mode , onError , address );
115102 }
116103 }
117104
@@ -125,18 +112,11 @@ public Record single() throws NoSuchRecordException
125112 }
126113 catch ( ConnectionFailureException e )
127114 {
128- throw sessionExpired ( e );
115+ throw sessionExpired ( e , onError , address );
129116 }
130117 catch ( ClientException e )
131118 {
132- if ( isFailedToWrite ( e ) )
133- {
134- throw failedWrite ();
135- }
136- else
137- {
138- throw e ;
139- }
119+ throw filterFailureToWrite ( e , mode , onError , address );
140120 }
141121 }
142122
@@ -149,18 +129,11 @@ public Record peek()
149129 }
150130 catch ( ConnectionFailureException e )
151131 {
152- throw sessionExpired ( e );
132+ throw sessionExpired ( e , onError , address );
153133 }
154134 catch ( ClientException e )
155135 {
156- if ( isFailedToWrite ( e ) )
157- {
158- throw failedWrite ();
159- }
160- else
161- {
162- throw e ;
163- }
136+ throw filterFailureToWrite ( e , mode , onError , address );
164137 }
165138 }
166139
@@ -173,42 +146,28 @@ public List<Record> list()
173146 }
174147 catch ( ConnectionFailureException e )
175148 {
176- throw sessionExpired ( e );
149+ throw sessionExpired ( e , onError , address );
177150 }
178151 catch ( ClientException e )
179152 {
180- if ( isFailedToWrite ( e ) )
181- {
182- throw failedWrite ();
183- }
184- else
185- {
186- throw e ;
187- }
153+ throw filterFailureToWrite ( e , mode , onError , address );
188154 }
189155 }
190156
191157 @ Override
192- public <T > List <T > list ( Function <Record ,T > mapFunction )
158+ public <T > List <T > list ( Function <Record , T > mapFunction )
193159 {
194160 try
195161 {
196- return delegate .list (mapFunction );
162+ return delegate .list ( mapFunction );
197163 }
198164 catch ( ConnectionFailureException e )
199165 {
200- throw sessionExpired ( e );
166+ throw sessionExpired ( e , onError , address );
201167 }
202168 catch ( ClientException e )
203169 {
204- if ( isFailedToWrite ( e ) )
205- {
206- throw failedWrite ();
207- }
208- else
209- {
210- throw e ;
211- }
170+ throw filterFailureToWrite ( e , mode , onError , address );
212171 }
213172 }
214173
@@ -227,35 +186,12 @@ public ResultSummary consume()
227186 }
228187 catch ( ConnectionFailureException e )
229188 {
230- throw sessionExpired ( e );
189+ throw sessionExpired ( e , onError , address );
231190 }
232191 catch ( ClientException e )
233192 {
234- if ( isFailedToWrite ( e ) )
235- {
236- throw failedWrite ();
237- }
238- else
239- {
240- throw e ;
241- }
193+ throw filterFailureToWrite ( e , mode , onError , address );
242194 }
243195 }
244196
245- private SessionExpiredException sessionExpired ( ConnectionFailureException e )
246- {
247- onError .onConnectionFailure ( address );
248- return new SessionExpiredException ( String .format ( "Server at %s is no longer available" , address .toString ()), e );
249- }
250-
251- private SessionExpiredException failedWrite ()
252- {
253- onError .onWriteFailure ( address );
254- return new SessionExpiredException ( String .format ( "Server at %s no longer accepts writes" , address .toString ()));
255- }
256-
257- private boolean isFailedToWrite ( ClientException e )
258- {
259- return e .code ().equals ( "Neo.ClientError.Cluster.NotALeader" );
260- }
261197}
0 commit comments