|
|
|
@ -19,29 +19,18 @@ public class OracleStatusService {
|
|
|
|
|
private static Map<String, Timer> alliveTask = new Hashtable<String, Timer>();
|
|
|
|
|
public final static int EXEC_TIME = 9;// 连接多少次后不成功,取消链接
|
|
|
|
|
public final static long INTERVAL_TIME = 60 * 1000;// 每隔多少毫秒执行一次连接任务
|
|
|
|
|
public final static long DELAY_TIME = 0; // 延迟多少秒后执行
|
|
|
|
|
public final static long DELAY_TIME = 30 * 1000; // 延迟多少秒后执行
|
|
|
|
|
|
|
|
|
|
public void connectToOracle(String replicasName) {
|
|
|
|
|
SimpleKubeClient sKubeClient = new SimpleKubeClient();
|
|
|
|
|
ReplicationController replicationController = sKubeClient
|
|
|
|
|
.getReplicationController(replicasName);
|
|
|
|
|
if (alliveTask.containsKey(replicasName)) {
|
|
|
|
|
killAlliveTask(replicasName);
|
|
|
|
|
}
|
|
|
|
|
if (null != replicationController) {
|
|
|
|
|
List<Pod> filterPods = sKubeClient
|
|
|
|
|
.getPodsForApplicaList(replicationController);
|
|
|
|
|
if (filterPods != null && filterPods.size() > 0) {
|
|
|
|
|
Pod pod = filterPods.get(0);
|
|
|
|
|
OracleConnectorParams orp = new OracleConnectorParams(
|
|
|
|
|
String.valueOf(sKubeClient.getPodContainerport(pod)),
|
|
|
|
|
sKubeClient.getPodHostIp(pod), replicasName);
|
|
|
|
|
Timer timer = new Timer();
|
|
|
|
|
alliveTask.put(replicasName, timer);
|
|
|
|
|
timer.schedule(new connectTask(orp, sKubeClient), DELAY_TIME,
|
|
|
|
|
INTERVAL_TIME);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
OracleConnectorParams orp = new OracleConnectorParams();
|
|
|
|
|
Timer timer = new Timer();
|
|
|
|
|
alliveTask.put(replicasName, timer);
|
|
|
|
|
timer.schedule(new connectTask(replicasName, orp, sKubeClient), DELAY_TIME,
|
|
|
|
|
INTERVAL_TIME);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -96,46 +85,75 @@ public class OracleStatusService {
|
|
|
|
|
private int count;
|
|
|
|
|
private OracleConnectorParams ocp;
|
|
|
|
|
private SimpleKubeClient client;
|
|
|
|
|
|
|
|
|
|
public connectTask(String taskName, OracleConnectorParams ocp, SimpleKubeClient client){
|
|
|
|
|
this.taskName = taskName;
|
|
|
|
|
this.ocp = ocp;
|
|
|
|
|
this.count = 0;
|
|
|
|
|
this.client = client;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public connectTask(OracleConnectorParams ocp, SimpleKubeClient client) {
|
|
|
|
|
this.taskName = ocp.getName();
|
|
|
|
|
this.ocp = ocp;
|
|
|
|
|
this.count = 0;
|
|
|
|
|
this.client = client;
|
|
|
|
|
this.client = client;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
if (count == EXEC_TIME && alliveTask.containsKey(taskName)) {
|
|
|
|
|
if (count == EXEC_TIME && alliveTask.containsKey(taskName)) { //如果任务已经执行10次,则任务oracle启动失败,并取消oracle连接
|
|
|
|
|
killAlliveTask(taskName);
|
|
|
|
|
client.updateOrAddReplicasLabelById(taskName, "status", "1");
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("更新replicationController标签: " + taskName
|
|
|
|
|
+ "\t[标签更新为: 失败]");
|
|
|
|
|
} else {
|
|
|
|
|
String url = "jdbc:oracle:thin:@" + ocp.getIp() + ":"
|
|
|
|
|
+ ocp.getPort() + ":" + ocp.getDatabaseName();
|
|
|
|
|
System.out.println("url:" + url +",user:" + ocp.getUser() + ",password:" + ocp.getPassword());
|
|
|
|
|
boolean flag = OracleConnector.canConnect(url, ocp.getUser(),
|
|
|
|
|
ocp.getPassword());
|
|
|
|
|
String message = "失败";
|
|
|
|
|
if (flag && alliveTask.containsKey(taskName)) {
|
|
|
|
|
client.updateOrAddReplicasLabelById(taskName, "status", "2");
|
|
|
|
|
message = "成功";
|
|
|
|
|
killAlliveTask(taskName); // 连接成功,取消连接
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("更新replicationController标签: " + taskName
|
|
|
|
|
+ "\t[标签更新为: 成功]");
|
|
|
|
|
client.updateOrAddReplicasLabelById(taskName, "status", "1"); //更新ReplicationController标签,将oracle状态标示未1(0:启动中,1:失败,2:成功)
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("更新replicationController标签: "
|
|
|
|
|
+ taskName + "\t[标签更新为: 失败]");
|
|
|
|
|
} else { //否则,执行连接oracle任务,判断oracle是否启动成功
|
|
|
|
|
Pod pod = filterPod();
|
|
|
|
|
if (pod != null) {
|
|
|
|
|
String ip = client.getPodHostIp(pod);
|
|
|
|
|
int port = client.getPodContainerport(pod);
|
|
|
|
|
if (ip != null && port != 0) {
|
|
|
|
|
String url = "jdbc:oracle:thin:@" + ip + ":" + port
|
|
|
|
|
+ ":" + ocp.getDatabaseName();
|
|
|
|
|
boolean flag = OracleConnector.canConnect(url, //连接结果返回参数,true标示连接成功,false标示连接失败
|
|
|
|
|
ocp.getUser(), ocp.getPassword());
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("url:" + url + ",user:"
|
|
|
|
|
+ ocp.getUser() + ",password:"
|
|
|
|
|
+ ocp.getPassword());
|
|
|
|
|
String message = "失败";
|
|
|
|
|
if (flag && alliveTask.containsKey(taskName)) {
|
|
|
|
|
client.updateOrAddReplicasLabelById(taskName,
|
|
|
|
|
"status", "2");
|
|
|
|
|
message = "成功";
|
|
|
|
|
killAlliveTask(taskName); // 连接成功,取消连接
|
|
|
|
|
Configs.CONSOLE_LOGGER
|
|
|
|
|
.info("更新replicationController标签: "
|
|
|
|
|
+ taskName + "\t[标签更新为: 成功]");
|
|
|
|
|
}
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("连接到数据库服务: " + taskName
|
|
|
|
|
+ "\t[连接结果: " + message + "]");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Configs.CONSOLE_LOGGER.info("连接到数据库服务: " + taskName
|
|
|
|
|
+ "\t[连接结果: " + message + "]");
|
|
|
|
|
}
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean cancel() {
|
|
|
|
|
System.out.println("aaaaaaa");
|
|
|
|
|
if (client != null)
|
|
|
|
|
this.client.close();
|
|
|
|
|
return super.cancel();
|
|
|
|
|
/**
|
|
|
|
|
* 获取oracle的连接ip地址和端口号
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private Pod filterPod() {
|
|
|
|
|
Pod pod = null;
|
|
|
|
|
ReplicationController replicationController = client
|
|
|
|
|
.getReplicationController(taskName);
|
|
|
|
|
if (null != replicationController) {
|
|
|
|
|
List<Pod> filterPods = client
|
|
|
|
|
.getPodsForApplicaList(replicationController);
|
|
|
|
|
if (filterPods != null && filterPods.size() > 0) {
|
|
|
|
|
pod = filterPods.get(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return pod;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getTaskName() {
|
|
|
|
|