use of org.neo4j.server.http.cypher.format.api.ConnectionException in project neo4j by neo4j.
the class LineDelimitedEventSourceJoltSerializer method writeErrorWrapper.
protected void writeErrorWrapper() {
if (errors.isEmpty()) {
return;
}
try {
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("error");
jsonGenerator.writeStartObject();
writeErrors();
jsonGenerator.writeEndObject();
jsonGenerator.writeEndObject();
flush();
} catch (JsonGenerationException e) {
throw new IllegalStateException(e);
} catch (IOException e) {
throw new ConnectionException("Failed to write to the connection", e);
}
}
use of org.neo4j.server.http.cypher.format.api.ConnectionException in project neo4j by neo4j.
the class ExecutionResultSerializer method writeFailure.
void writeFailure(FailureEvent failureEvent) {
try {
errors.add(failureEvent);
ensureStatementFieldClosed();
} catch (JsonGenerationException e) {
throw new IllegalStateException(e);
} catch (IOException e) {
throw new ConnectionException("Failed to write to the connection", e);
}
}
use of org.neo4j.server.http.cypher.format.api.ConnectionException in project neo4j by neo4j.
the class ExecutionResultSerializer method writeErrors.
private void writeErrors() {
try {
ensureDocumentOpen();
jsonGenerator.writeArrayFieldStart("errors");
try {
for (FailureEvent error : errors) {
try {
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField("code", error.getStatus().code().serialize());
jsonGenerator.writeObjectField("message", error.getMessage());
} finally {
jsonGenerator.writeEndObject();
}
}
} finally {
jsonGenerator.writeEndArray();
currentState = State.ERRORS_WRITTEN;
}
} catch (IOException e) {
throw new ConnectionException("Failed to write to the response stream", e);
}
}
use of org.neo4j.server.http.cypher.format.api.ConnectionException in project neo4j by neo4j.
the class InvocationTest method shouldHandleConnectionErrorWhenReadingStatementsInImplicitTransaction.
@Test
void shouldHandleConnectionErrorWhenReadingStatementsInImplicitTransaction() {
// given
when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
TransactionHandle handle = getTransactionHandle(executionEngine, registry);
InputEventStream inputEventStream = mock(InputEventStream.class);
when(inputEventStream.read()).thenThrow(new ConnectionException("Connection error", new IOException("Broken pipe")));
Invocation invocation = new Invocation(log, handle, uriScheme.txCommitUri(1337L), mock(MemoryPool.class, RETURNS_MOCKS), inputEventStream, true);
// when
var e = assertThrows(ConnectionException.class, () -> invocation.execute(outputEventStream));
assertEquals("Connection error", e.getMessage());
// then
verify(internalTransaction).rollback();
verify(registry).forget(1337L);
verifyNoInteractions(outputEventStream);
}
use of org.neo4j.server.http.cypher.format.api.ConnectionException in project neo4j by neo4j.
the class InvocationTest method shouldFreeMemoryOnException.
@Test
void shouldFreeMemoryOnException() {
var handle = getTransactionHandle(executionEngine, registry, false);
var memoryPool = mock(MemoryPool.class);
var inputEventStream = mock(InputEventStream.class);
when(internalTransaction.execute("query", emptyMap())).thenReturn(executionResult);
when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
when(inputEventStream.read()).thenReturn(new Statement("query", map()), NULL_STATEMENT);
mockDefaultResult();
doThrow(new ConnectionException("Something broke", new IOException("Oh no"))).when(outputEventStream).writeStatementEnd(any(), any(), any(), any());
var invocation = new Invocation(mock(Log.class), handle, uriScheme.txCommitUri(1337L), memoryPool, inputEventStream, true);
assertThrows(ConnectionException.class, () -> invocation.execute(outputEventStream));
verify(memoryPool).reserveHeap(Statement.SHALLOW_SIZE);
verify(memoryPool).releaseHeap(Statement.SHALLOW_SIZE);
verifyNoMoreInteractions(memoryPool);
}
Aggregations