use of com.alibaba.cobar.CobarConfig in project cobar by alibaba.
the class SingleNodeHandler method execute.
public void execute() throws Exception {
lock.lock();
try {
this.isRunning = true;
this.packetId = 0;
this.buffer = session.getSource().allocate();
} finally {
lock.unlock();
}
final MySQLConnection conn = session.getTarget(route);
if (conn == null) {
CobarConfig conf = CobarServer.getInstance().getConfig();
MySQLDataNode dn = conf.getDataNodes().get(route.getName());
dn.getConnection(this, null);
} else {
conn.setRunning(true);
session.getSource().getProcessor().getExecutor().execute(new Runnable() {
@Override
public void run() {
_execute(conn);
}
});
}
}
use of com.alibaba.cobar.CobarConfig in project cobar by alibaba.
the class SingleNodeExecutor method newExecute.
/**
* 新数据通道的执行
*/
private void newExecute(final RouteResultsetNode rrn, final BlockingSession ss, final int flag) {
final ServerConnection sc = ss.getSource();
// 检查数据节点是否存在
CobarConfig conf = CobarServer.getInstance().getConfig();
final MySQLDataNode dn = conf.getDataNodes().get(rrn.getName());
if (dn == null) {
LOGGER.warn(new StringBuilder().append(sc).append(rrn).toString(), new UnknownDataNodeException());
handleError(ErrorCode.ER_BAD_DB_ERROR, "Unknown dataNode '" + rrn.getName() + "'", ss);
return;
}
// 提交执行任务
sc.getProcessor().getExecutor().execute(new Runnable() {
@Override
public void run() {
// 取得数据通道
int i = rrn.getReplicaIndex();
Channel c = null;
try {
c = (i == DEFAULT_REPLICA_INDEX) ? dn.getChannel() : dn.getChannel(i);
} catch (Exception e) {
LOGGER.warn(new StringBuilder().append(sc).append(rrn).toString(), e);
String msg = e.getMessage();
handleError(ErrorCode.ER_BAD_DB_ERROR, msg == null ? e.getClass().getSimpleName() : msg, ss);
return;
}
// 检查连接是否已关闭。
if (sc.isClosed()) {
c.release();
endRunning();
return;
}
// 绑定数据通道
c.setRunning(true);
Channel old = ss.getTarget().put(rrn, c);
if (old != null && old != c) {
old.close();
}
// 执行
execute0(rrn, ss, c, flag);
}
});
}
use of com.alibaba.cobar.CobarConfig in project cobar by alibaba.
the class ShowSlow method dataNode.
public static void dataNode(ManagerConnection c, String name) {
ByteBuffer buffer = c.allocate();
// write header
buffer = header.write(buffer, c);
// write fields
for (FieldPacket field : fields) {
buffer = field.write(buffer, c);
}
// write eof
buffer = eof.write(buffer, c);
// write rows
byte packetId = eof.packetId;
CobarConfig conf = CobarServer.getInstance().getConfig();
MySQLDataNode dn = conf.getDataNodes().get(name);
MySQLDataSource ds = null;
if (dn != null && (ds = dn.getSource()) != null) {
SQLRecord[] records = ds.getSqlRecorder().getRecords();
for (int i = records.length - 1; i >= 0; i--) {
if (records[i] != null) {
RowDataPacket row = getRow(records[i], c.getCharset());
row.packetId = ++packetId;
buffer = row.write(buffer, c);
}
}
}
// write last eof
EOFPacket lastEof = new EOFPacket();
lastEof.packetId = ++packetId;
buffer = lastEof.write(buffer, c);
// write buffer
c.write(buffer);
}
use of com.alibaba.cobar.CobarConfig in project cobar by alibaba.
the class ShowSlow method schema.
public static void schema(ManagerConnection c, String name) {
ByteBuffer buffer = c.allocate();
// write header
buffer = header.write(buffer, c);
// write fields
for (FieldPacket field : fields) {
buffer = field.write(buffer, c);
}
// write eof
buffer = eof.write(buffer, c);
// write rows
byte packetId = eof.packetId;
CobarConfig conf = CobarServer.getInstance().getConfig();
SchemaConfig schema = conf.getSchemas().get(name);
if (schema != null) {
SQLRecorder recorder = new SQLRecorder(conf.getSystem().getSqlRecordCount());
Map<String, MySQLDataNode> dataNodes = conf.getDataNodes();
for (String n : schema.getAllDataNodes()) {
MySQLDataNode dn = dataNodes.get(n);
MySQLDataSource ds = null;
if (dn != null && (ds = dn.getSource()) != null) {
for (SQLRecord r : ds.getSqlRecorder().getRecords()) {
if (r != null && recorder.check(r.executeTime)) {
recorder.add(r);
}
}
}
}
SQLRecord[] records = recorder.getRecords();
for (int i = records.length - 1; i >= 0; i--) {
if (records[i] != null) {
RowDataPacket row = getRow(records[i], c.getCharset());
row.packetId = ++packetId;
buffer = row.write(buffer, c);
}
}
}
// write last eof
EOFPacket lastEof = new EOFPacket();
lastEof.packetId = ++packetId;
buffer = lastEof.write(buffer, c);
// write buffer
c.write(buffer);
}
use of com.alibaba.cobar.CobarConfig in project cobar by alibaba.
the class ShowCobarCluster method getRows.
private static List<RowDataPacket> getRows(ServerConnection c) {
List<RowDataPacket> rows = new LinkedList<RowDataPacket>();
CobarConfig config = CobarServer.getInstance().getConfig();
CobarCluster cluster = config.getCluster();
Map<String, SchemaConfig> schemas = config.getSchemas();
SchemaConfig schema = (c.getSchema() == null) ? null : schemas.get(c.getSchema());
// 如果没有指定schema或者schema为null,则使用全部集群。
if (schema == null) {
Map<String, CobarNode> nodes = cluster.getNodes();
for (CobarNode n : nodes.values()) {
if (n != null && n.isOnline()) {
rows.add(getRow(n, c.getCharset()));
}
}
} else {
String group = (schema.getGroup() == null) ? "default" : schema.getGroup();
List<String> nodeList = cluster.getGroups().get(group);
if (nodeList != null && nodeList.size() > 0) {
Map<String, CobarNode> nodes = cluster.getNodes();
for (String id : nodeList) {
CobarNode n = nodes.get(id);
if (n != null && n.isOnline()) {
rows.add(getRow(n, c.getCharset()));
}
}
}
// 如果schema对应的group或者默认group都没有有效的节点,则使用全部集群。
if (rows.size() == 0) {
Map<String, CobarNode> nodes = cluster.getNodes();
for (CobarNode n : nodes.values()) {
if (n != null && n.isOnline()) {
rows.add(getRow(n, c.getCharset()));
}
}
}
}
if (rows.size() == 0) {
alarm.error(Alarms.CLUSTER_EMPTY + c.toString());
}
return rows;
}
Aggregations