Skip to content

Commit bf81b2d

Browse files
committed
Update calculation for getting free slots
1 parent 2b420a3 commit bf81b2d

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

storm-server/src/main/java/org/apache/storm/scheduler/IsolationScheduler.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ private Map<String, Set<WorkerSlot>> hostToUsedSlots(Cluster cluster) {
312312
private LinkedList<HostAssignableSlots> hostAssignableSlots(Cluster cluster) {
313313
List<WorkerSlot> assignableSlots = cluster.getAssignableSlots();
314314
Map<String, List<WorkerSlot>> hostAssignableSlots = new HashMap<String, List<WorkerSlot>>();
315+
Map<String, Integer> hostFreeSlotCounts = new HashMap<String, Integer>();
315316
for (WorkerSlot slot : assignableSlots) {
316317
String host = cluster.getHost(slot.getNodeId());
317318
List<WorkerSlot> slots = hostAssignableSlots.get(host);
@@ -320,20 +321,16 @@ private LinkedList<HostAssignableSlots> hostAssignableSlots(Cluster cluster) {
320321
hostAssignableSlots.put(host, slots);
321322
}
322323
slots.add(slot);
323-
}
324-
325-
final Map<String, Integer> hostFreeSlotCount = new HashMap<String, Integer>();
326-
for (WorkerSlot slot : cluster.getAvailableSlots()) {
327-
String host = cluster.getHost(slot.getNodeId());
328-
if (hostAssignableSlots.containsKey(host)) {
329-
Integer count = hostFreeSlotCount.get(host);
330-
hostFreeSlotCount.put(host, (count == null ? 0 : count) + 1);
324+
if (!cluster.isSlotOccupied(slot)) {
325+
Integer count = hostFreeSlotCounts.get(host);
326+
hostFreeSlotCounts.put(host, count == null ? 1 : count + 1);
331327
}
332328
}
333-
334329
List<HostAssignableSlots> sortHostAssignSlots = new ArrayList<HostAssignableSlots>();
335330
for (Map.Entry<String, List<WorkerSlot>> entry : hostAssignableSlots.entrySet()) {
336-
sortHostAssignSlots.add(new HostAssignableSlots(entry.getKey(), entry.getValue()));
331+
Integer free = hostFreeSlotCounts.get(entry.getKey());
332+
sortHostAssignSlots.add(new HostAssignableSlots(entry.getKey(), entry.getValue(),
333+
free != null ? free.intValue() : 0));
337334
}
338335
Collections.sort(sortHostAssignSlots, new Comparator<HostAssignableSlots>() {
339336
@Override
@@ -342,14 +339,12 @@ public int compare(HostAssignableSlots o1, HostAssignableSlots o2) {
342339
if (bySlots != 0) {
343340
return bySlots;
344341
}
345-
int free1 = hostFreeSlotCount.containsKey(o1.getHostName())
346-
? hostFreeSlotCount.get(o1.getHostName()) : 0;
347-
int free2 = hostFreeSlotCount.containsKey(o2.getHostName())
348-
? hostFreeSlotCount.get(o2.getHostName()) : 0;
349-
int byFree = free2 - free1;
342+
343+
int byFree = o2.getFreeSlots() - o1.getFreeSlots();
350344
if (byFree != 0) {
351345
return byFree;
352346
}
347+
353348
return o1.getHostName().compareTo(o2.getHostName());
354349
}
355350
});
@@ -427,10 +422,12 @@ public Set<ExecutorDetails> getExecutors() {
427422
class HostAssignableSlots {
428423
private String hostName;
429424
private List<WorkerSlot> workerSlots;
425+
private final int freeSlots;
430426

431-
HostAssignableSlots(String hostName, List<WorkerSlot> workerSlots) {
427+
HostAssignableSlots(String hostName, List<WorkerSlot> workerSlots, int freeSlots) {
432428
this.hostName = hostName;
433429
this.workerSlots = workerSlots;
430+
this.freeSlots = freeSlots;
434431
}
435432

436433
public String getHostName() {
@@ -441,5 +438,9 @@ public List<WorkerSlot> getWorkerSlots() {
441438
return workerSlots;
442439
}
443440

441+
public int getFreeSlots() {
442+
return freeSlots;
443+
}
444+
444445
}
445446
}

0 commit comments

Comments
 (0)