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

peacewong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git


The following commit(s) were added to refs/heads/master by this push:
     new c0cebe40f [BUG] Fix em sort error (#4915)
c0cebe40f is described below

commit c0cebe40fb13850794fa5caffde99ca9c68e8905
Author: sjgllgh <[email protected]>
AuthorDate: Mon Sep 25 19:36:17 2023 +0800

    [BUG] Fix em sort error (#4915)
    
    * fix em sort error
    
    * Adjust the sorting when there are null values.
---
 .../am/selector/rule/ResourceNodeSelectRule.java   | 10 ++++--
 .../common/entity/resource/CPUResource.java        |  6 ++++
 .../resource/DriverAndKubernetesResource.java      | 36 +++++++++++++++++++++
 .../entity/resource/DriverAndYarnResource.java     | 37 ++++++++++++++++++++++
 .../common/entity/resource/KubernetesResource.java | 13 ++++++++
 .../entity/resource/LoadInstanceResource.java      | 21 ++++++++++++
 .../common/entity/resource/LoadResource.java       | 14 ++++++++
 .../common/entity/resource/MemoryResource.java     |  6 ++++
 .../manager/common/entity/resource/Resource.java   |  2 ++
 .../common/entity/resource/SpecialResource.java    | 11 +++++++
 .../common/entity/resource/YarnResource.java       | 12 +++++++
 11 files changed, 165 insertions(+), 3 deletions(-)

diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/selector/rule/ResourceNodeSelectRule.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/selector/rule/ResourceNodeSelectRule.java
index 951ea1a40..ad259ec30 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/selector/rule/ResourceNodeSelectRule.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/selector/rule/ResourceNodeSelectRule.java
@@ -53,10 +53,10 @@ public class ResourceNodeSelectRule implements 
NodeSelectRule {
           RMNode nodeBRm = (RMNode) nodeB;
           if (nodeARm.getNodeResource() == null
               || nodeARm.getNodeResource().getLeftResource() == null) {
-            return -1;
+            return 1;
           } else if (nodeBRm.getNodeResource() == null
               || nodeBRm.getNodeResource().getLeftResource() == null) {
-            return 1;
+            return -1;
           } else {
             if (nodeARm
                 .getNodeResource()
@@ -69,7 +69,11 @@ public class ResourceNodeSelectRule implements 
NodeSelectRule {
                 .moreThan(nodeBRm.getNodeResource().getLeftResource())) {
               return -1;
             } else {
-              return 1;
+              // 从大到小排序 (Sort from large to small)
+              return -(nodeARm
+                  .getNodeResource()
+                  .getLeftResource()
+                  .compare(nodeBRm.getNodeResource().getLeftResource()));
             }
           }
         } catch (Throwable t) {
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/CPUResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/CPUResource.java
index d985dcbc4..aecd3ee3c 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/CPUResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/CPUResource.java
@@ -120,6 +120,12 @@ public class CPUResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource r) {
+    CPUResource cpuResource = toCPUResource(r);
+    return Integer.compare(this.getCores(), cpuResource.getCores());
+  }
+
   @Override
   public String toJson() {
     return String.format(" \"cpu\":%s ", cores);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndKubernetesResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndKubernetesResource.java
index 6d047b33a..3426e91e5 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndKubernetesResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndKubernetesResource.java
@@ -200,6 +200,42 @@ public class DriverAndKubernetesResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource resource) {
+    DriverAndKubernetesResource r = new DriverAndKubernetesResource(resource);
+    if (isModuleOperate(r)) {
+      return loadInstanceResource.compare(r.loadInstanceResource);
+    } else {
+      if (loadInstanceResource.getMemory() > 
r.loadInstanceResource.getMemory()) {
+        return 1;
+      } else if (loadInstanceResource.getMemory() < 
r.loadInstanceResource.getMemory()) {
+        return -1;
+      } else {
+        // If memory is equal, compare cores
+        if (loadInstanceResource.getCores() > 
r.loadInstanceResource.getCores()) {
+          return 1;
+        } else if (loadInstanceResource.getCores() < 
r.loadInstanceResource.getCores()) {
+          return -1;
+        } else {
+          // If cores are equal, compare instances
+          if (loadInstanceResource.getInstances() > 
r.loadInstanceResource.getInstances()) {
+            return 1;
+          } else if (loadInstanceResource.getInstances() < 
r.loadInstanceResource.getInstances()) {
+            return -1;
+          } else {
+            if (kubernetesResource.getMemory() > 
r.kubernetesResource.getMemory()) {
+              return 1;
+            } else if (kubernetesResource.getMemory() < 
r.kubernetesResource.getMemory()) {
+              return -1;
+            } else {
+              return Long.compare(kubernetesResource.getCores(), 
r.kubernetesResource.getCores());
+            }
+          }
+        }
+      }
+    }
+  }
+
   public String toJson() {
     String load = "null";
     String kubernetes = "null";
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndYarnResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndYarnResource.java
index 4aff24bac..c9cfcf378 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndYarnResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/DriverAndYarnResource.java
@@ -202,6 +202,43 @@ public class DriverAndYarnResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource resource) {
+    DriverAndYarnResource r = new DriverAndYarnResource(resource);
+
+    if (isModuleOperate(r)) {
+      return loadInstanceResource.compare(r.loadInstanceResource);
+    } else {
+      if (loadInstanceResource.getMemory() > 
r.loadInstanceResource.getMemory()) {
+        return 1;
+      } else if (loadInstanceResource.getMemory() < 
r.loadInstanceResource.getMemory()) {
+        return -1;
+      } else {
+        // If memory is equal, compare cores
+        if (loadInstanceResource.getCores() > 
r.loadInstanceResource.getCores()) {
+          return 1;
+        } else if (loadInstanceResource.getCores() < 
r.loadInstanceResource.getCores()) {
+          return -1;
+        } else {
+          // If cores are equal, compare instances
+          if (loadInstanceResource.getInstances() > 
r.loadInstanceResource.getInstances()) {
+            return 1;
+          } else if (loadInstanceResource.getInstances() < 
r.loadInstanceResource.getInstances()) {
+            return -1;
+          } else {
+            if (yarnResource.getQueueMemory() > 
r.yarnResource.getQueueMemory()) {
+              return 1;
+            } else if (yarnResource.getQueueMemory() < 
r.yarnResource.getQueueMemory()) {
+              return -1;
+            } else {
+              return Integer.compare(yarnResource.getQueueCores(), 
r.yarnResource.getQueueCores());
+            }
+          }
+        }
+      }
+    }
+  }
+
   public String toJson() {
     String load = "null";
     String yarn = "null";
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/KubernetesResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/KubernetesResource.java
index d716569c5..c24762068 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/KubernetesResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/KubernetesResource.java
@@ -127,6 +127,19 @@ public class KubernetesResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource r) {
+    KubernetesResource temp = new KubernetesResource(r);
+    if (this.getMemory() > temp.getMemory()) {
+      return 1;
+    } else if (this.getMemory() < temp.getMemory()) {
+      return -1;
+    } else {
+      // If memory is equal, compare cores
+      return Long.compare(this.getCores(), temp.getCores());
+    }
+  }
+
   @Override
   public String toJson() {
     return String.format(
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadInstanceResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadInstanceResource.java
index 7fb332f35..2eb37cc55 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadInstanceResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadInstanceResource.java
@@ -138,6 +138,27 @@ public class LoadInstanceResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource r) {
+    LoadInstanceResource temp = new LoadInstanceResource(r);
+
+    if (this.getMemory() > temp.getMemory()) {
+      return 1;
+    } else if (this.getMemory() < temp.getMemory()) {
+      return -1;
+    } else {
+      // If memory is equal, compare cores
+      if (this.getCores() > temp.getCores()) {
+        return 1;
+      } else if (this.getCores() < temp.getCores()) {
+        return -1;
+      } else {
+        // If cores are equal, compare instances
+        return Integer.compare(this.getInstances(), temp.getInstances());
+      }
+    }
+  }
+
   @Override
   public String toJson() {
     return String.format(
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadResource.java
index 79a637484..313ce7b92 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/LoadResource.java
@@ -108,6 +108,20 @@ public class LoadResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource r) {
+    LoadResource temp = new LoadResource(r);
+
+    if (this.getMemory() > temp.getMemory()) {
+      return 1;
+    } else if (this.getMemory() < temp.getMemory()) {
+      return -1;
+    } else {
+      // If memory is equal, compare cores
+      return Integer.compare(this.getCores(), temp.getCores());
+    }
+  }
+
   @Override
   public String toJson() {
     return String.format(
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/MemoryResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/MemoryResource.java
index 23dc96fdb..da69c930c 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/MemoryResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/MemoryResource.java
@@ -93,6 +93,12 @@ public class MemoryResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource resource) {
+    MemoryResource r = toMemoryResource(resource);
+    return Long.compare(this.getMemory(), r.getMemory());
+  }
+
   @Override
   public boolean caseMore(Resource r) {
     return moreThan(r);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/Resource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/Resource.java
index 361a6f28e..ca45f374c 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/Resource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/Resource.java
@@ -122,6 +122,8 @@ public abstract class Resource {
 
   public abstract boolean less(Resource r);
 
+  public abstract int compare(Resource r);
+
   public Resource add(Resource r, float rate) {
     return this.add(r.multiplied(rate));
   }
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/SpecialResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/SpecialResource.java
index b670eb174..60518a155 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/SpecialResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/SpecialResource.java
@@ -348,6 +348,17 @@ public class SpecialResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource r) {
+    if (this.moreThan(r)) {
+      return 1;
+    } else if (this.less(r)) {
+      return -1;
+    } else {
+      return 0;
+    }
+  }
+
   @Override
   public String toJson() {
     return String.format("Special:%s", resources);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/YarnResource.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/YarnResource.java
index 25f4d8298..48a63cd0f 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/YarnResource.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/resource/YarnResource.java
@@ -160,6 +160,18 @@ public class YarnResource extends Resource {
     return !notLess(r);
   }
 
+  @Override
+  public int compare(Resource resource) {
+    YarnResource r = toYarnResource(resource);
+    if (this.getQueueMemory() > r.getQueueMemory()) {
+      return 1;
+    } else if (this.getQueueMemory() < r.getQueueMemory()) {
+      return -1;
+    } else {
+      return Integer.compare(this.getQueueCores(), r.getQueueCores());
+    }
+  }
+
   @Override
   public String toJson() {
     return String.format(


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to