package com.taobao.zeus.store; import java.util.List; import java.util.Map; import org.antlr.grammar.v3.ANTLRParser.id_return; import org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore.Processor.isPartitionMarkedForEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.taobao.zeus.model.GroupDescriptor; import com.taobao.zeus.model.JobDescriptorOld; import com.taobao.zeus.model.JobStatus; import com.taobao.zeus.model.JobDescriptorOld.JobScheduleTypeOld; import com.taobao.zeus.util.Tuple; public class GroupManagerToolOld { private static Logger log = LoggerFactory.getLogger(GroupManagerToolOld.class); public static GroupBeanOld getUpstreamGroupBean(String groupId,GroupManagerOld groupManagerOld) { GroupDescriptor group=groupManagerOld.getGroupDescriptor(groupId); GroupBeanOld result=new GroupBeanOld(group); if(group.getParent()!=null){ GroupBeanOld parent=groupManagerOld.getUpstreamGroupBean(group.getParent()); result.setParentGroupBean(parent); } return result; } /** * 构建一个带完整依赖关系的树形节点网络 * @param GroupManagerOld * @return */ public static GroupBeanOld buildGlobeGroupBean(GroupManagerOld groupManagerOld) { GroupBeanOld root=groupManagerOld.getDownstreamGroupBean(groupManagerOld.getRootGroupId()); //构建依赖关系的网状结构 //1.提取所有的GroupBean 和 JobBeanOld // structureDependNet(root, root.getAllGroupBeanMap(), root.getAllJobBeanMap()); //2.将JobBean中的依赖关系在内存模型中关联起来 Map<String, JobBeanOld> allJobBeans=root.getAllSubJobBeans(); for(JobBeanOld j1:allJobBeans.values()){ if(j1.getJobDescriptor().getScheduleType()==JobScheduleTypeOld.Dependent){ for(String depId:j1.getJobDescriptor().getDependencies()){ try { JobBeanOld depJob=allJobBeans.get(depId); j1.addDependee(depJob); depJob.addDepender(j1); } catch (Exception e) { log.error("The jobid is " + j1.getJobDescriptor().getId() + ", the depId is " + depId); } } } } return root; } /** * 构建一个树形节点网络,不包含Job之间的依赖关系对象引用 * @param GroupManagerOld * @return */ public static GroupBeanOld buildGlobeGroupBeanWithoutDepend(GroupManagerOld groupManagerOld) { GroupBeanOld root=groupManagerOld.getDownstreamGroupBean(groupManagerOld.getRootGroupId()); return root; } public static GroupBeanOld getDownstreamGroupBean(String groupId,GroupManagerOld groupManagerOld) { GroupDescriptor group=groupManagerOld.getGroupDescriptor(groupId); GroupBeanOld result=new GroupBeanOld(group); return groupManagerOld.getDownstreamGroupBean(result); } public static GroupBeanOld getDownstreamGroupBean(GroupBeanOld parent,GroupManagerOld groupManagerOld) { if(parent.isDirectory()){ List<GroupDescriptor> children=groupManagerOld.getChildrenGroup(parent.getGroupDescriptor().getId()); for(GroupDescriptor child:children){ GroupBeanOld childBean=new GroupBeanOld(child); groupManagerOld.getDownstreamGroupBean(childBean); childBean.setParentGroupBean(parent); parent.getChildrenGroupBeans().add(childBean); } }else{ List<Tuple<JobDescriptorOld, JobStatus>> jobs=groupManagerOld.getChildrenJob(parent.getGroupDescriptor().getId()); for(Tuple<JobDescriptorOld, JobStatus> tuple:jobs){ JobBeanOld JobBeanOld=new JobBeanOld(tuple.getX(),tuple.getY()); JobBeanOld.setGroupBean(parent); parent.getJobBeans().put(tuple.getX().getId(), JobBeanOld); } } return parent; } public static JobBeanOld getUpstreamJobBean(String jobId,GroupManagerOld groupManagerOld) { Tuple<JobDescriptorOld, JobStatus> tuple=groupManagerOld.getJobDescriptor(jobId); if(tuple!=null){ JobBeanOld result=new JobBeanOld(tuple.getX(),tuple.getY()); result.setGroupBean(groupManagerOld.getUpstreamGroupBean(result.getJobDescriptor().getGroupId())); return result; }else{ return null; } } }