This commit is contained in:
@@ -127,45 +127,67 @@ public abstract class PoolTcpSource extends PoolSource<AsyncConnection> {
|
|||||||
conn.beforeCloseListener((c) -> usingCounter.decrementAndGet());
|
conn.beforeCloseListener((c) -> usingCounter.decrementAndGet());
|
||||||
CompletableFuture<AsyncConnection> future = new CompletableFuture();
|
CompletableFuture<AsyncConnection> future = new CompletableFuture();
|
||||||
final ByteBuffer buffer = reqConnectBuffer(conn);
|
final ByteBuffer buffer = reqConnectBuffer(conn);
|
||||||
conn.write(buffer, null, new CompletionHandler<Integer, Void>() {
|
if (buffer == null) {
|
||||||
@Override
|
final ByteBuffer rbuffer = bufferPool.get();
|
||||||
public void completed(Integer result, Void attachment1) {
|
conn.read(rbuffer, null, new CompletionHandler<Integer, Void>() {
|
||||||
if (result < 0) {
|
@Override
|
||||||
failed(new SQLException("Write Buffer Error"), attachment1);
|
public void completed(Integer result, Void attachment2) {
|
||||||
return;
|
if (result < 0) {
|
||||||
|
failed(new SQLException("Read Buffer Error"), attachment2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rbuffer.flip();
|
||||||
|
respConnectBuffer(rbuffer, future, conn);
|
||||||
}
|
}
|
||||||
if (buffer.hasRemaining()) {
|
|
||||||
conn.write(buffer, attachment1, this);
|
@Override
|
||||||
return;
|
public void failed(Throwable exc, Void attachment2) {
|
||||||
|
bufferPool.accept(rbuffer);
|
||||||
|
future.completeExceptionally(exc);
|
||||||
|
conn.dispose();
|
||||||
}
|
}
|
||||||
buffer.clear();
|
});
|
||||||
conn.read(buffer, null, new CompletionHandler<Integer, Void>() {
|
} else {
|
||||||
@Override
|
conn.write(buffer, null, new CompletionHandler<Integer, Void>() {
|
||||||
public void completed(Integer result, Void attachment2) {
|
@Override
|
||||||
if (result < 0) {
|
public void completed(Integer result, Void attachment1) {
|
||||||
failed(new SQLException("Read Buffer Error"), attachment2);
|
if (result < 0) {
|
||||||
return;
|
failed(new SQLException("Write Buffer Error"), attachment1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (buffer.hasRemaining()) {
|
||||||
|
conn.write(buffer, attachment1, this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
buffer.clear();
|
||||||
|
conn.read(buffer, null, new CompletionHandler<Integer, Void>() {
|
||||||
|
@Override
|
||||||
|
public void completed(Integer result, Void attachment2) {
|
||||||
|
if (result < 0) {
|
||||||
|
failed(new SQLException("Read Buffer Error"), attachment2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
buffer.flip();
|
||||||
|
respConnectBuffer(buffer, future, conn);
|
||||||
}
|
}
|
||||||
buffer.flip();
|
|
||||||
respConnectBuffer(buffer, future, conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(Throwable exc, Void attachment2) {
|
public void failed(Throwable exc, Void attachment2) {
|
||||||
bufferPool.accept(buffer);
|
bufferPool.accept(buffer);
|
||||||
future.completeExceptionally(exc);
|
future.completeExceptionally(exc);
|
||||||
conn.dispose();
|
conn.dispose();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(Throwable exc, Void attachment1) {
|
public void failed(Throwable exc, Void attachment1) {
|
||||||
bufferPool.accept(buffer);
|
bufferPool.accept(buffer);
|
||||||
future.completeExceptionally(exc);
|
future.completeExceptionally(exc);
|
||||||
conn.dispose();
|
conn.dispose();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
return future;
|
return future;
|
||||||
}).whenComplete((c, t) -> {
|
}).whenComplete((c, t) -> {
|
||||||
if (t == null) {
|
if (t == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user