Search in sources :

Example 1 with ContainerScaleJob

use of com.vip.saturn.job.console.domain.container.ContainerScaleJob in project Saturn by vipshop.

the class DashboardServiceImpl method isContainerInstanceMismatch.

private AbnormalContainer isContainerInstanceMismatch(AbnormalContainer abnormalContainer, CuratorFrameworkOp curatorFrameworkOp) {
    try {
        String taskId = abnormalContainer.getTaskId();
        String dcosTaskConfigNodePath = ContainerNodePath.getDcosTaskConfigNodePath(taskId);
        long configMtime = curatorFrameworkOp.getMtime(dcosTaskConfigNodePath);
        String dcosTaskScaleJobsNodePath = ContainerNodePath.getDcosTaskScaleJobsNodePath(taskId);
        List<String> scaleJobs = curatorFrameworkOp.getChildren(dcosTaskScaleJobsNodePath);
        long maxItemMtime = 0L;
        String lastScalaJob = null;
        if (scaleJobs != null && !taskId.isEmpty()) {
            for (String scaleJob : scaleJobs) {
                // 如果存在running节点,则不做检查
                if (curatorFrameworkOp.checkExists(JobNodePath.getExecutionNodePath(scaleJob, "0", "running"))) {
                    return null;
                }
                String completedNodePath = JobNodePath.getExecutionNodePath(scaleJob, "0", "completed");
                long completedMtime = curatorFrameworkOp.getMtime(completedNodePath);
                if (completedMtime > maxItemMtime) {
                    lastScalaJob = scaleJob;
                    maxItemMtime = completedMtime;
                }
            }
        }
        Integer myInstance = -1;
        long lastMtime = 0L;
        if (configMtime > maxItemMtime) {
            String taskConfigData = curatorFrameworkOp.getData(dcosTaskConfigNodePath);
            if (taskConfigData != null && taskConfigData.trim().length() > 0) {
                ContainerConfig containerConfig = JSON.parseObject(taskConfigData, ContainerConfig.class);
                myInstance = containerConfig.getInstances();
                lastMtime = configMtime;
            }
        } else if (configMtime < maxItemMtime) {
            String dcosTaskScaleJobNodePath = ContainerNodePath.getDcosTaskScaleJobNodePath(taskId, lastScalaJob);
            String scaleJobData = curatorFrameworkOp.getData(dcosTaskScaleJobNodePath);
            if (scaleJobData != null && scaleJobData.trim().length() > 0) {
                ContainerScaleJob containerScaleJob = JSON.parseObject(scaleJobData, ContainerScaleJob.class);
                myInstance = containerScaleJob.getContainerScaleJobConfig().getInstances();
                lastMtime = maxItemMtime;
            }
        }
        if (myInstance != -1) {
            boolean timeAllowed = Math.abs(System.currentTimeMillis() - lastMtime) <= ALLOW_CONTAINER_DELAY_MILLIONSECONDS;
            if (timeAllowed) {
                return null;
            }
            int count = containerService.getContainerRunningInstances(taskId, curatorFrameworkOp);
            if (myInstance != count) {
                abnormalContainer.setCause(AbnormalContainer.Cause.CONTAINER_INSTANCE_MISMATCH.name());
                abnormalContainer.setConfigInstances(myInstance);
                abnormalContainer.setRunningInstances(count);
                try {
                    reportAlarmService.dashboardContainerInstancesMismatch(abnormalContainer.getDomainName(), abnormalContainer.getTaskId(), abnormalContainer.getConfigInstances(), abnormalContainer.getRunningInstances());
                } catch (Exception e) {
                    log.error(e.getMessage(), e);
                }
                return abnormalContainer;
            }
        }
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
    return null;
}
Also used : ContainerConfig(com.vip.saturn.job.console.domain.container.ContainerConfig) ContainerScaleJob(com.vip.saturn.job.console.domain.container.ContainerScaleJob) SaturnJobConsoleException(com.vip.saturn.job.console.exception.SaturnJobConsoleException) JobConsoleException(com.vip.saturn.job.console.exception.JobConsoleException) NoNodeException(org.apache.zookeeper.KeeperException.NoNodeException)

Aggregations

ContainerConfig (com.vip.saturn.job.console.domain.container.ContainerConfig)1 ContainerScaleJob (com.vip.saturn.job.console.domain.container.ContainerScaleJob)1 JobConsoleException (com.vip.saturn.job.console.exception.JobConsoleException)1 SaturnJobConsoleException (com.vip.saturn.job.console.exception.SaturnJobConsoleException)1 NoNodeException (org.apache.zookeeper.KeeperException.NoNodeException)1