package com.alibaba.doris.common.router.service;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.doris.common.adminservice.impl.RouteConfigServiceImpl;
import com.alibaba.doris.common.config.ConfigManager;
import com.alibaba.doris.common.configer.RouteTableConfiger;
import com.alibaba.doris.common.event.RouteConfigChangeEvent;
import com.alibaba.doris.common.event.RouteConfigListener;
import com.alibaba.doris.common.route.RouteTable;
public class RouteTableConfigerImpl implements RouteTableConfiger {
private List<RouteConfigListener> listeners = new ArrayList<RouteConfigListener>();
private RouteTable routeTable;
private long configVersion;
private ConfigManager configManager;
public RouteTableConfigerImpl() {
}
public String getConfigListenerName() {
return "routeConfig";
}
public void addConfigListener(RouteConfigListener routeConfigListener) {
listeners.add(routeConfigListener);
}
public List<RouteConfigListener> getConfigListeners() {
return listeners;
}
public RouteTable getRouteTable() {
return routeTable;
}
public synchronized RouteTable getRouteTable(boolean t) {
if (t) {
routeTable = RouteConfigParser.parse(RouteConfigServiceImpl.getInstance()
.getRouteConfig());
return routeTable;
} else {
return routeTable;
}
}
public void initConfig() {
}
public void setConfigLocation(String configLocation) {
// nothing
}
public void setConfigManager(ConfigManager configManager) {
this.configManager = configManager;
}
public synchronized void onConfigChange(String configContent) {
RouteTable tempRouteTable = RouteConfigParser.parse(configContent);
if (routeTable != null
&& (tempRouteTable == null || (tempRouteTable.getVersion() == this.routeTable
.getVersion()))) {
return;
}
RouteConfigChangeEvent event = new RouteConfigChangeEvent();
event.setRouteTable(tempRouteTable);
for (RouteConfigListener listener : listeners) {
listener.onConfigChange(event);
}
this.routeTable = tempRouteTable;
this.configVersion = routeTable.getVersion();
}
public Long getConfigVersion() {
return this.configVersion;
}
}