Changeset 1150 for DCWoRMS/branches


Ignore:
Timestamp:
07/31/13 13:50:56 (12 years ago)
Author:
wojtekp
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • DCWoRMS/branches/coolemall/src/schedframe/scheduling/tasks/Job.java

    r490 r1150  
    44import org.qcg.broker.schemas.resreqs.ParentType; 
    55import org.qcg.broker.schemas.resreqs.ResourceRequirements; 
     6import org.qcg.broker.schemas.resreqs.Workflow; 
    67import org.qcg.broker.schemas.resreqs.types.TaskStatesName; 
    78 
     
    3132        protected boolean isRegistered; 
    3233         
     34        private int status; 
     35         
    3336        public Job(String id){ 
    3437                tasks = new ArrayList<Task>(); 
     
    139142                        Task t = tasks.get(i); 
    140143                        isForAll = (t.getStatus() == baseStatus); 
    141                         switch(t.getStatus()){ 
    142                                 case (int)BrokerConstants.TASK_STATUS_QUEUED:  
    143                                         return (int)BrokerConstants.TASK_STATUS_QUEUED; 
    144                                 case (int)BrokerConstants.TASK_STATUS_UNSUBMITTED: 
    145                                         return (int)BrokerConstants.TASK_STATUS_UNSUBMITTED; 
    146                         } 
    147144                } 
    148145                 
     
    150147                        return (int)BrokerConstants.JOB_STATUS_FINISHED; 
    151148                 
    152                 return -1; 
     149                return status; 
    153150        } 
    154151         
     
    182179        } 
    183180 
    184         public void setStatus(int status) throws Exception{ 
    185  
     181        public void setStatus(int status){ 
     182                this.status = status; 
    186183        } 
    187184 
     
    192189        public void register(JobRegistryImpl jobRegistry) { 
    193190                isRegistered = jobRegistry.addJob(this); 
    194                  
    195191        } 
    196192         
     
    200196        } 
    201197         
    202         private List<Task> getReadyTasks(){ 
    203                  
    204                 List<Task> readyTasks = new ArrayList<Task>(); 
     198        private List<Task> getReadyTasks() throws NoSuchFieldException{ 
     199                 
     200                List<Task> availableTasks = new ArrayList<Task>(); 
    205201                int size = tasks.size(); 
    206202                 
    207203                for(int i = 0; i < size; i++){ 
    208204                        int parCnt; 
    209                         int previousTaskReadyCnt = 0; 
     205                        int previousTaskSucceedCnt = 0; 
    210206                        Task task = tasks.get(i); 
    211207                        if(task.getStatus() != (int)BrokerConstants.TASK_STATUS_UNSUBMITTED) 
    212208                                continue; 
    213                         try{             
    214                                 parCnt = task.getDescription().getWorkflow().getParentCount(); 
    215                         } catch(Exception e){ 
    216                                 parCnt = 0; 
    217                         } 
    218                         if(parCnt == 0) { 
    219                                 readyTasks.add(task); 
    220                         } 
    221                         else { 
    222                                 for(int j = 0; j < parCnt; j++){ 
    223                                         ParentType par = task.getDescription().getWorkflow().getParent(j); 
    224                                         if(par.getTriggerState().compareTo(TaskStatesName.FINISHED) == 0){ 
    225                                                 try { 
     209                        //the following procedure supports only one nested structure 
     210                        Workflow w = task.getDescription().getWorkflow(); 
     211                        if (w == null){ 
     212                                availableTasks.add(task); 
     213                                continue; 
     214                        } 
     215                        if(w.getAnd() != null) { 
     216                                parCnt = w.getAnd().getParentOpTypeItemCount(); 
     217                                if(parCnt == 0) 
     218                                { 
     219                                        availableTasks.add(task); 
     220                                } 
     221                                else 
     222                                { 
     223                                        for(int j = 0; j < parCnt; j++){ 
     224                                                ParentType par = w.getAnd().getParentOpTypeItem(j).getParent(); 
     225                                                if(par.getTriggerState().compareTo(TaskStatesName.FINISHED) == 0){ 
    226226                                                        if(!getTask(par.getContent()).isFinished()){ 
    227227                                                                break; 
    228228                                                        } 
    229                                                 } catch (NoSuchFieldException e) { 
    230                                                         // TODO Auto-generated catch block 
    231                                                         e.printStackTrace(); 
    232229                                                } 
     230                                                previousTaskSucceedCnt++; 
    233231                                        } 
    234                                         previousTaskReadyCnt++; 
    235                                 } 
    236                                  
    237                                 if(previousTaskReadyCnt == parCnt && task.getDescription().getWorkflow().getAnd() != null) 
    238                                                 readyTasks.add(task); 
    239                                 else if(previousTaskReadyCnt > 0 && task.getDescription().getWorkflow().getOr() != null) 
    240                                         readyTasks.add(task); 
     232 
     233                                        if(previousTaskSucceedCnt == parCnt) 
     234                                                availableTasks.add(task); 
     235                                } 
     236                        }  
     237                        else if(w.getOr() != null) { 
     238                                parCnt = w.getOr().getParentOpTypeItemCount(); 
     239                                if(parCnt == 0) 
     240                                { 
     241                                        availableTasks.add(task); 
     242                                } 
     243                                else 
     244                                { 
     245                                        for(int j = 0; j < parCnt; j++){ 
     246                                                ParentType par = w.getOr().getParentOpTypeItem(j).getParent(); 
     247                                                if(par.getTriggerState().compareTo(TaskStatesName.FINISHED) == 0){ 
     248                                                        if(!getTask(par.getContent()).isFinished()){ 
     249                                                                continue; 
     250                                                        } 
     251                                                } 
     252                                                previousTaskSucceedCnt++; 
     253                                        } 
     254 
     255                                        if(previousTaskSucceedCnt > 0) 
     256                                                availableTasks.add(task); 
     257                                } 
     258                        } 
     259                        else { 
     260                                parCnt = w.getParentCount(); 
     261                                if(parCnt == 0) 
     262                                { 
     263                                        availableTasks.add(task); 
     264                                } 
     265                                else 
     266                                { 
     267                                        for(int j = 0; j < parCnt; j++){ 
     268                                                ParentType par = w.getParent(j); 
     269                                                if(par.getTriggerState().compareTo(TaskStatesName.FINISHED) == 0){ 
     270                                                        if(!getTask(par.getContent()).isFinished()){ 
     271                                                                continue; 
     272                                                        } 
     273                                                } 
     274                                                previousTaskSucceedCnt++; 
     275                                        } 
     276 
     277                                        if(previousTaskSucceedCnt == parCnt) 
     278                                                availableTasks.add(task); 
     279                                } 
    241280                        } 
    242281                }                
    243                 return readyTasks; 
     282                return availableTasks; 
    244283        } 
    245284         
Note: See TracChangeset for help on using the changeset viewer.