package io.mycat.route.handler; import java.sql.SQLNonTransientException; import org.apache.log4j.Logger; import io.mycat.MycatServer; import io.mycat.backend.PhysicalDBNode; import io.mycat.cache.LayerCachePool; import io.mycat.route.RouteResultset; import io.mycat.route.util.RouterUtil; import io.mycat.server.MySQLFrontConnection; import io.mycat.server.config.node.SchemaConfig; import io.mycat.server.config.node.SystemConfig; /** * 处理注释中类型为datanode 的情况 * * @author zhuam */ public class HintDataNodeHandler implements HintHandler { private static final Logger LOGGER = Logger.getLogger(HintSchemaHandler.class); @Override public RouteResultset route(SystemConfig sysConfig, SchemaConfig schema, int sqlType, String realSQL, String charset, MySQLFrontConnection sc, LayerCachePool cachePool, String hintSQLValue) throws SQLNonTransientException { String stmt = realSQL; if (LOGGER.isDebugEnabled()) { LOGGER.debug("route datanode sql hint from " + stmt); } RouteResultset rrs = new RouteResultset(stmt, sqlType); PhysicalDBNode dataNode = MycatServer.getInstance().getConfig().getDataNodes().get(hintSQLValue); if (dataNode != null) { rrs = RouterUtil.routeToSingleNode(rrs, dataNode.getName(), stmt); } else { String msg = "can't find hint datanode:" + hintSQLValue; LOGGER.warn(msg); throw new SQLNonTransientException(msg); } return rrs; } }