Package com.taobao.zeus.store

Source Code of com.taobao.zeus.store.GroupManagerTool

package com.taobao.zeus.store;

import java.util.List;
import java.util.Map;

import com.taobao.zeus.model.GroupDescriptor;
import com.taobao.zeus.model.JobDescriptor;
import com.taobao.zeus.model.JobStatus;
import com.taobao.zeus.model.JobDescriptor.JobScheduleType;
import com.taobao.zeus.store.mysql.tool.PersistenceAndBeanConvert;
import com.taobao.zeus.util.Tuple;

public class GroupManagerTool {

  public static GroupBean getUpstreamGroupBean(String groupId,GroupManager groupManager) {
    GroupDescriptor group=groupManager.getGroupDescriptor(groupId);
    GroupBean result=new GroupBean(group);
    if(group.getParent()!=null){
      GroupBean parent=groupManager.getUpstreamGroupBean(group.getParent());
      result.setParentGroupBean(parent);
    }
    return result;
  }
  /**
   * 构建一个带完整依赖关系的树形节点网络
   * @param groupManager
   * @return
   */
  public static GroupBean buildGlobeGroupBean(GroupManager groupManager) {
    GroupBean root=groupManager.getDownstreamGroupBean(groupManager.getRootGroupId());
    //构建依赖关系的网状结构
    //1.提取所有的GroupBean 和 JobBean
//    structureDependNet(root, root.getAllGroupBeanMap(), root.getAllJobBeanMap());
    //2.将JobBean中的依赖关系在内存模型中关联起来
    Map<String, JobBean> allJobBeans=root.getAllSubJobBeans();
    for(JobBean j1:allJobBeans.values()){
      if(j1.getJobDescriptor().getScheduleType()==JobScheduleType.Dependent){
        for(String depId:j1.getJobDescriptor().getDependencies()){
          JobBean depJob=allJobBeans.get(depId);
          j1.addDependee(depJob);
          depJob.addDepender(j1);
        }
      }
    }
    return root;
  }
  /**
   * 构建一个树形节点网络,不包含Job之间的依赖关系对象引用
   * @param groupManager
   * @return
   */
  public static GroupBean buildGlobeGroupBeanWithoutDepend(GroupManager groupManager) {
    GroupBean root=groupManager.getDownstreamGroupBean(groupManager.getRootGroupId());
    return root;
  }
  public static GroupBean getDownstreamGroupBean(String groupId,GroupManager groupManager) {
    GroupDescriptor group=groupManager.getGroupDescriptor(groupId);
    GroupBean result=new GroupBean(group);
    return groupManager.getDownstreamGroupBean(result);
  }
 
  public static GroupBean getDownstreamGroupBean(GroupBean parent,GroupManager groupManager) {
    if(parent.isDirectory()){
      List<GroupDescriptor> children=groupManager.getChildrenGroup(parent.getGroupDescriptor().getId());
      for(GroupDescriptor child:children){
        GroupBean childBean=new GroupBean(child);
        groupManager.getDownstreamGroupBean(childBean);
        childBean.setParentGroupBean(parent);
        parent.getChildrenGroupBeans().add(childBean);
      }
    }else{
      List<Tuple<JobDescriptor, JobStatus>> jobs=groupManager.getChildrenJob(parent.getGroupDescriptor().getId());
      for(Tuple<JobDescriptor, JobStatus> tuple:jobs){
        JobBean jobBean=new JobBean(tuple.getX(),tuple.getY());
        jobBean.setGroupBean(parent);
        parent.getJobBeans().put(tuple.getX().getId(), jobBean);
      }
    }
   
    return parent;
  }
 
  public static JobBean getUpstreamJobBean(String jobId,GroupManager groupManager) {
    Tuple<JobDescriptor, JobStatus> tuple=groupManager.getJobDescriptor(jobId);
    if(tuple!=null){
      JobBean result=new JobBean(tuple.getX(),tuple.getY());
      result.setGroupBean(groupManager.getUpstreamGroupBean(result.getJobDescriptor().getGroupId()));
      return result;
    }else{
      return null;
    }
  }
}
TOP

Related Classes of com.taobao.zeus.store.GroupManagerTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.