This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-mft.git

commit a155f92d9a5824b6824022160a87d16666e9cf37
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Tue Sep 27 21:17:16 2022 -0400

    Making agent scheduling logic fair
---
 .../airavata/mft/controller/MFTController.java     | 23 +++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
 
b/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
index 77fb123..e674993 100644
--- 
a/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
+++ 
b/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
@@ -39,6 +39,7 @@ import org.springframework.context.annotation.ComponentScan;
 
 import javax.annotation.PreDestroy;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.Random;
@@ -252,17 +253,28 @@ public class MFTController implements CommandLineRunner {
         } else if (!transferRequest.getAffinityTransfer()){
             List<Optional<AgentInfo>> agentInfos = 
liveAgentIds.stream().map(id -> 
mftConsulClient.getAgentInfo(id)).collect(Collectors.toList());
             int transferCount = -1;
+            List<String> candidates = new ArrayList<>();
             for (Optional<AgentInfo> agentInfo : agentInfos) {
                 if (agentInfo.isPresent()) {
+                    List<String> agentActiveTransferIds = 
mftConsulClient.getAgentActiveTransferIds(agentInfo.get());
+                    logger.info("Agent {} has transfers assigned {}", 
agentInfo.get().getId(), agentActiveTransferIds.size());
                     if (transferCount == -1) {
-                        transferCount = 
mftConsulClient.getAgentActiveTransferIds(agentInfo.get()).size();
-                        selectedAgent = agentInfo.get().getId();
-                    } else if (transferCount > 
mftConsulClient.getAgentActiveTransferIds(agentInfo.get()).size()) {
-                        transferCount = 
mftConsulClient.getAgentActiveTransferIds(agentInfo.get()).size();
-                        selectedAgent = agentInfo.get().getId();
+                        transferCount = agentActiveTransferIds.size();
+                        candidates.add(agentInfo.get().getId());
+                    } else if (transferCount == agentActiveTransferIds.size()) 
{
+                        candidates.add(agentInfo.get().getId());
+                    } else if (transferCount > agentActiveTransferIds.size()) {
+                        candidates = new ArrayList<>();
+                        transferCount = agentActiveTransferIds.size();
+                        candidates.add(agentInfo.get().getId());
                     }
                 }
             }
+
+            if (candidates.size() > 0) {
+                Random rand = new Random();
+                selectedAgent = 
candidates.get(rand.nextInt(candidates.size()));
+            }
         }
 
         if (selectedAgent == null) {
@@ -270,6 +282,7 @@ public class MFTController implements CommandLineRunner {
             return Optional.empty();
         }
 
+        logger.info("Selected agent {}", selectedAgent);
         return Optional.of(selectedAgent);
     }
 

Reply via email to