use of com.actiontech.dble.backend.mysql.nio.MySQLConnection in project dble by actiontech.
the class SetTestJob method okResponse.
@Override
public void okResponse(byte[] ok, BackendConnection conn) {
doFinished(false);
sc.write(ok);
ResetConnHandler handler = new ResetConnHandler();
conn.setResponseHandler(handler);
((MySQLConnection) conn).setComplexQuery(true);
MySQLConnection connection = (MySQLConnection) conn;
connection.write(connection.writeToBuffer(ResetConnectionPacket.RESET, connection.allocate()));
}
use of com.actiontech.dble.backend.mysql.nio.MySQLConnection in project dble by actiontech.
the class DirectGroupByHandler method ownThreadJob.
@Override
protected void ownThreadJob(Object... objects) {
MySQLConnection conn = (MySQLConnection) objects[0];
recordElapsedTime("local group by thread is start:");
try {
int eofCount = 0;
for (; ; ) {
RowDataPacket row = outQueue.take();
if (row.getFieldCount() == 0) {
eofCount++;
if (eofCount == bucketSize)
break;
else
continue;
}
groupLocalResult.add(row);
}
recordElapsedTime("local group by thread is end:");
groupLocalResult.done();
recordElapsedTime("local group by thread is done for read:");
if (!hasFirstRow.get()) {
if (HandlerTool.needSendNoRow(this.groupBys))
sendNoRowGroupRowPacket(conn);
} else {
sendGroupRowPacket(conn);
}
nextHandler.rowEofResponse(null, this.isLeft, conn);
} catch (Exception e) {
String msg = "group by thread is error," + e.getLocalizedMessage();
LOGGER.info(msg, e);
session.onQueryError(msg.getBytes());
}
}
use of com.actiontech.dble.backend.mysql.nio.MySQLConnection in project dble by actiontech.
the class BaseSelectHandler method errorResponse.
@Override
public void errorResponse(byte[] err, BackendConnection conn) {
((MySQLConnection) conn).setRunning(false);
ErrorPacket errPacket = new ErrorPacket();
errPacket.read(err);
String errMsg;
try {
errMsg = new String(errPacket.getMessage(), CharsetUtil.getJavaCharset(conn.getCharset().getResults()));
} catch (UnsupportedEncodingException e) {
errMsg = "UnsupportedEncodingException:" + conn.getCharset();
}
LOGGER.info(conn.toString() + errMsg);
if (terminate.get())
return;
session.onQueryError(errMsg.getBytes());
}
use of com.actiontech.dble.backend.mysql.nio.MySQLConnection in project dble by actiontech.
the class MultiNodeMergeHandler method terminateThread.
@Override
protected void terminateThread() throws Exception {
for (Entry<MySQLConnection, BlockingQueue<HeapItem>> entry : this.queues.entrySet()) {
// add EOF to signal atoMerge thread
entry.getValue().clear();
entry.getValue().put(new HeapItem(null, null, entry.getKey()));
}
recycleConn();
}
use of com.actiontech.dble.backend.mysql.nio.MySQLConnection in project dble by actiontech.
the class MultiNodeMergeHandler method ownThreadJob.
@Override
protected void ownThreadJob(Object... objects) {
try {
ArrayMinHeap<HeapItem> heap = new ArrayMinHeap<>(new Comparator<HeapItem>() {
@Override
public int compare(HeapItem o1, HeapItem o2) {
RowDataPacket row1 = o1.getRowPacket();
RowDataPacket row2 = o2.getRowPacket();
if (row1 == null || row2 == null) {
if (row1 == row2)
return 0;
if (row1 == null)
return -1;
return 1;
}
return rowComparator.compare(row1, row2);
}
});
// init heap
for (Map.Entry<MySQLConnection, BlockingQueue<HeapItem>> entry : queues.entrySet()) {
HeapItem firstItem = entry.getValue().take();
heap.add(firstItem);
}
while (!heap.isEmpty()) {
if (terminate.get())
return;
HeapItem top = heap.peak();
if (top.isNullItem()) {
heap.poll();
} else {
BlockingQueue<HeapItem> topItemQueue = queues.get(top.getIndex());
HeapItem item = topItemQueue.take();
heap.replaceTop(item);
if (nextHandler.rowResponse(top.getRowData(), top.getRowPacket(), this.isLeft, top.getIndex())) {
noNeedRows = true;
while (!heap.isEmpty()) {
HeapItem itemToDiscard = heap.poll();
if (!itemToDiscard.isNullItem()) {
BlockingQueue<HeapItem> discardQueue = queues.get(itemToDiscard.getIndex());
while (true) {
if (discardQueue.take().isNullItem() || terminate.get()) {
break;
}
}
}
}
}
}
}
if (LOGGER.isInfoEnabled()) {
String executeQueries = getRoutesSql(route);
LOGGER.info(executeQueries + " heap send eof: ");
}
nextHandler.rowEofResponse(null, this.isLeft, queues.keySet().iterator().next());
} catch (Exception e) {
String msg = "Merge thread error, " + e.getLocalizedMessage();
LOGGER.info(msg, e);
session.onQueryError(msg.getBytes());
}
}
Aggregations