Skip to content
This repository has been archived by the owner on Mar 12, 2019. It is now read-only.

Commit

Permalink
Merge pull request #364 from HCALRunControl/ConfigPriority
Browse files Browse the repository at this point in the history
ConfigPriority
  • Loading branch information
kakwok committed Mar 5, 2018
2 parents 2ef1b70 + 7f96aeb commit 5a46138
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 10 deletions.
31 changes: 30 additions & 1 deletion src/rcms/fm/app/level1/HCALEventHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
import rcms.fm.resource.qualifiedresource.FunctionManager;
import rcms.resourceservice.db.Group;
import rcms.resourceservice.db.resource.Resource;
import rcms.resourceservice.db.resource.config.ConfigProperty;
import rcms.resourceservice.db.resource.fm.FunctionManagerResource;
import rcms.resourceservice.db.resource.xdaq.XdaqApplicationResource;
import rcms.resourceservice.db.resource.xdaq.XdaqExecutiveResource;
Expand Down Expand Up @@ -687,6 +688,8 @@ protected void initXDAQ() throws UserActionException{

functionManager.containerFMEvmTrig = new QualifiedResourceContainer(qg.seekQualifiedResourcesOfRole("EvmTrig"));
functionManager.containerFMTCDSLPM = new QualifiedResourceContainer(qg.seekQualifiedResourcesOfRole("Level2_TCDSLPM"));
//Empty the container if LPM FM is masked
functionManager.containerFMTCDSLPM = new QualifiedResourceContainer(functionManager.containerFMTCDSLPM.getActiveQRList());
ActiveChildFMs.removeAll(qg.seekQualifiedResourcesOfRole("EvmTrig"));
ActiveChildFMs.removeAll(qg.seekQualifiedResourcesOfRole("Level2_TCDSLPM"));

Expand Down Expand Up @@ -2664,6 +2667,12 @@ void CheckAndSetParameter(ParameterSet pSet , String PamName, boolean printResul
throw new UserActionException(errMessage);
}
}
// Print of the names of the QR in an arrayList
void PrintQRnames(List<QualifiedResource> qrlist){
QualifiedResourceContainer qrc = new QualifiedResourceContainer(qrlist);
PrintQRnames(qrc);
}

// Print of the names of the QR in a QRContainer
void PrintQRnames(QualifiedResourceContainer qrc){
String Names = "";
Expand Down Expand Up @@ -2750,5 +2759,25 @@ void maskTCDSExecAndJC(QualifiedGroup qg){
qr.setInitialized(true);
}
}
}
}

// Get property from a QR
public String getProperty(QualifiedResource QR, String name ) throws Exception {

List<ConfigProperty> propertiesList = QR.getResource().getProperties();

if(propertiesList.isEmpty()) {
throw new Exception("Property list is empty");
}
ConfigProperty property = null;
Iterator<ConfigProperty> iter = propertiesList.iterator();
while(iter.hasNext()) {
property = iter.next();
if(property.getName().equals(name)) {
return property.getValue();
}
}
throw new Exception("Property "+name+" not found");
}

}
26 changes: 21 additions & 5 deletions src/rcms/fm/app/level1/HCALMasker.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.Arrays;
import java.util.ArrayList;

Expand All @@ -15,6 +16,7 @@
import rcms.resourceservice.db.resource.xdaq.XdaqExecutiveResource;
import rcms.fm.resource.QualifiedGroup;
import rcms.fm.resource.QualifiedResource;
import rcms.fm.resource.QualifiedResourceContainer;
import rcms.fm.resource.qualifiedresource.FunctionManager;
import rcms.fm.fw.parameter.type.StringT;
import rcms.fm.fw.parameter.type.VectorT;
Expand Down Expand Up @@ -155,12 +157,27 @@ protected Map<String, Resource> pickEvmTrig() {
VectorT<StringT> MaskedFMs = (VectorT<StringT>)functionManager.getHCALparameterSet().get("MASKED_RESOURCES").getValue();

List<QualifiedResource> level2list = qg.seekQualifiedResourcesOfType(new FunctionManager());

List<QualifiedResource> level2noMaskedFMlist=new ArrayList<QualifiedResource>() ;
//Ignore masked FMs
for (QualifiedResource level2 : level2list) {
//logger.warn("[JohnLogMaskBug] " + functionManager.FMname + ": now checking if " + level2.getName() + " is masked before picking the EvmTrig FM. The list of masked FMs is:");
//logger.warn(Arrays.asList(MaskedFMs.toArray()).toString());
if (!Arrays.asList(MaskedFMs.toArray()).contains(new StringT(level2.getName()))) {
//logger.warn("[JohnLogMaskBug] " + functionManager.FMname + "... didn't find " + level2.getName() + " in the masked FMs list.");
level2noMaskedFMlist.add(level2);
}
}
QualifiedResourceContainer level2QRC = new QualifiedResourceContainer(level2noMaskedFMlist);

//Get ConfigPriority map of active FMs
TreeMap<Integer, ArrayList<FunctionManager> > priorityFMmap = ((HCALlevelOneEventHandler)functionManager.theEventHandler).getConfigPriorities(level2QRC);
Integer LastPriority = priorityFMmap.lastKey();
List<QualifiedResource> level2EvmTrigCandidateList = new ArrayList<QualifiedResource>();

//Add last priority FMs into evmTrigCandidateList
level2EvmTrigCandidateList.addAll(priorityFMmap.get(LastPriority));
logger.info("[HCAL "+functionManager.FMname+"] Considering following FMs to be EvmTrig:");
functionManager.theEventHandler.PrintQRnames(level2EvmTrigCandidateList);

//Consider only LV2 FMs with last priority to be EvmTrig (FM with no ConfigPriority will be grouped into this)
for (QualifiedResource level2 : level2EvmTrigCandidateList) {
try {
QualifiedGroup level2group = ((FunctionManager)level2).getQualifiedGroup();
logger.debug("[HCAL " + functionManager.FMname + "]: the qualified group has this DB connector" + level2group.rs.toString());
Expand Down Expand Up @@ -210,7 +227,6 @@ protected Map<String, Resource> pickEvmTrig() {
catch (DBConnectorException ex) {
logger.error("[HCAL " + functionManager.FMname + "]: Got a DBConnectorException when trying to retrieve level2s' children resources: " + ex.getMessage());
}
}
}


Expand Down
65 changes: 61 additions & 4 deletions src/rcms/fm/app/level1/HCALlevelOneEventHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
import java.util.Iterator;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import java.lang.Math;
import java.lang.Integer;

Expand Down Expand Up @@ -987,10 +991,20 @@ else if (RunKey.equals("ZS") || RunKey.equals("VdM-ZS")) {
}
// 2) Normal FMs
if (!functionManager.containerFMChildrenNoEvmTrigNoTCDSLPM.isEmpty()){
SimpleTask fmChildrenTask = new SimpleTask(functionManager.containerFMChildrenNoEvmTrigNoTCDSLPM,configureInput,HCALStates.CONFIGURING,HCALStates.CONFIGURED,"LV1: Configuring regular priority FM children");
logger.info("[HCAL LVL1 " + functionManager.FMname +"] Configuring these regular LV2 FMs: ");
PrintQRnames(functionManager.containerFMChildrenNoEvmTrigNoTCDSLPM);
configureTaskSeq.addLast(fmChildrenTask);

//Sorted Map of ConfigPriority (1:FM1,FM2, 2:FM3,FM4) from the LV2FMs properties
TreeMap<Integer, ArrayList<FunctionManager> > priorityFMmap= getConfigPriorities(functionManager.containerFMChildrenNoEvmTrigNoTCDSLPM);

for (Map.Entry<Integer, ArrayList<FunctionManager> > entry: priorityFMmap.entrySet()){
Integer thisPriority = entry.getKey();
ArrayList<FunctionManager> thisPriorityFMs = entry.getValue();

logger.info("[HCAL LVL1 " + functionManager.FMname +"] configPriority ="+thisPriority+" has the following FMs");
QualifiedResourceContainer thisPriorityFMContainer = new QualifiedResourceContainer(thisPriorityFMs);
PrintQRnames(thisPriorityFMContainer);
SimpleTask thisPriorityTask = new SimpleTask(thisPriorityFMContainer,configureInput,HCALStates.CONFIGURING,HCALStates.CONFIGURED,"LV1: Configuring normalFMs with priority"+thisPriority);
configureTaskSeq.addLast(thisPriorityTask);
}
}
// 3) configure EvmTrig FM last
// NOTE: Emptyness check is important to support global run
Expand Down Expand Up @@ -1755,6 +1769,49 @@ public static boolean isValidInstanceNumber(String s){
return false;
}
}

//Get sorted Map of ConfigPriority (1:FM1,FM2, 2:FM3,FM4) from the LV2FMs. The QRC must contain LV2 FM QualifiedResource
public TreeMap<Integer, ArrayList<FunctionManager> > getConfigPriorities(QualifiedResourceContainer LV2FMs){
//TreeMap by default sorts accending order with keys
TreeMap<Integer, ArrayList<FunctionManager> > configPriorityMap = new TreeMap<Integer, ArrayList<FunctionManager> >();
Set<Integer> configMapKeys = configPriorityMap.keySet();
Integer defaultPriority = 99;
ArrayList<FunctionManager> defaultFMlist = new ArrayList<FunctionManager>();

for(QualifiedResource LV2FM : LV2FMs.getQualifiedResourceList()){
try{
Integer thisConfigPriority = Integer.parseInt(getProperty(LV2FM,"configPriority"));
if (!configMapKeys.contains(thisConfigPriority)){
//New configPriority,
ArrayList<FunctionManager> FMlist = new ArrayList<FunctionManager>();
FMlist.add((FunctionManager) LV2FM);
configPriorityMap.put(thisConfigPriority,FMlist);
}else{
//Existing configPriority, append FM name to this priority
ArrayList<FunctionManager> FMlist = configPriorityMap.get(thisConfigPriority);
FMlist.add((FunctionManager) LV2FM);
configPriorityMap.put(thisConfigPriority,FMlist);
}
}
catch(Exception e){
defaultFMlist.add((FunctionManager) LV2FM);
}
}
//Lump all FMs without ConfigPriority property into Last priority
if( !configPriorityMap.isEmpty()){
Integer lastPriority = configPriorityMap.lastKey();
ArrayList<FunctionManager> lastPriorityFMlist = configPriorityMap.get(lastPriority);
lastPriorityFMlist.addAll(defaultFMlist);
configPriorityMap.put(lastPriority, lastPriorityFMlist);
}
else{
//Lump all FMs without ConfigPriority property into default priority if no FM has configPriority
configPriorityMap.put(defaultPriority, defaultFMlist);
}

return configPriorityMap;
}

}


0 comments on commit 5a46138

Please sign in to comment.