|
22 | 22 |
|
23 | 23 | import org.apache.hadoop.yarn.api.records.Resource; |
24 | 24 | import org.apache.hadoop.yarn.server.resourcemanager.resource.ResourceType; |
| 25 | +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueue; |
25 | 26 | import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.Schedulable; |
26 | 27 |
|
27 | 28 | /** |
@@ -49,14 +50,29 @@ public static void computeShares( |
49 | 50 | ResourceType type) { |
50 | 51 | Collection<Schedulable> activeSchedulables = new ArrayList<Schedulable>(); |
51 | 52 | for (Schedulable sched : schedulables) { |
52 | | - if (sched.isActive()) { |
53 | | - activeSchedulables.add(sched); |
54 | | - } else { |
| 53 | + if ((sched instanceof FSQueue) && !((FSQueue) sched).isActive()) { |
55 | 54 | setResourceValue(0, sched.getFairShare(), type); |
| 55 | + } else { |
| 56 | + activeSchedulables.add(sched); |
56 | 57 | } |
57 | 58 | } |
58 | 59 |
|
59 | | - computeSharesInternal(activeSchedulables, totalResources, type); |
| 60 | + computeSharesInternal(activeSchedulables, totalResources, type, false); |
| 61 | + } |
| 62 | + |
| 63 | + /** |
| 64 | + * Compute the steady fair share of the given queues. The steady fair |
| 65 | + * share is an allocation of shares considering all queues, i.e., |
| 66 | + * active and inactive. |
| 67 | + * |
| 68 | + * @param queues |
| 69 | + * @param totalResources |
| 70 | + * @param type |
| 71 | + */ |
| 72 | + public static void computeSteadyShares( |
| 73 | + Collection<? extends FSQueue> queues, Resource totalResources, |
| 74 | + ResourceType type) { |
| 75 | + computeSharesInternal(queues, totalResources, type, true); |
60 | 76 | } |
61 | 77 |
|
62 | 78 | /** |
@@ -102,7 +118,7 @@ public static void computeShares( |
102 | 118 | */ |
103 | 119 | private static void computeSharesInternal( |
104 | 120 | Collection<? extends Schedulable> schedulables, Resource totalResources, |
105 | | - ResourceType type) { |
| 121 | + ResourceType type, boolean isSteadyShare) { |
106 | 122 | if (schedulables.isEmpty()) { |
107 | 123 | return; |
108 | 124 | } |
@@ -145,7 +161,13 @@ private static void computeSharesInternal( |
145 | 161 | } |
146 | 162 | // Set the fair shares based on the value of R we've converged to |
147 | 163 | for (Schedulable sched : schedulables) { |
148 | | - setResourceValue(computeShare(sched, right, type), sched.getFairShare(), type); |
| 164 | + if (isSteadyShare) { |
| 165 | + setResourceValue(computeShare(sched, right, type), |
| 166 | + ((FSQueue) sched).getSteadyFairShare(), type); |
| 167 | + } else { |
| 168 | + setResourceValue( |
| 169 | + computeShare(sched, right, type), sched.getFairShare(), type); |
| 170 | + } |
149 | 171 | } |
150 | 172 | } |
151 | 173 |
|
|
0 commit comments