Skip to content

Commit ef328d1

Browse files
author
Santosh Marella
committed
Address review comments; fix findBugs and build issues
- Defined a new 'myriadSchedulerConf' to exclude hadoop dependencies from being copied into myriad-scheduler/build/libs. Tests are now unaffected. - Fixed a few findBugs issues. - In ResourceOffersEventHandler, fixed code to ensure an offer used to launch a zero profile NM is not used again for FGS. - Fixed a test in TestMyriadScheduler. The test for NodeStore needs to be coded differently due to the recent FGS changes. Will be done in a separate changeset.
1 parent 5611a8c commit ef328d1

File tree

9 files changed

+27
-31
lines changed

9 files changed

+27
-31
lines changed

build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ subprojects {
4545
capsule
4646
myriadExecutorConf
4747
myriadExecutorConf.transitive = false
48-
// exclude hadoop/yarn deps for 'runtime'
49-
// TODO (Kannan Rajah) Exclude only while packaging
50-
//runtime.exclude group: 'org.apache.hadoop', module: '*'
5148
}
5249

5350
repositories {

myriad-scheduler/build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ dependencies {
1414
compile "com.fasterxml.jackson.core:jackson-databind:2.5.1"
1515
compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.5.1"
1616
compile "org.apache.curator:curator-framework:2.7.1"
17-
testCompile "org.apache.hadoop:hadoop-yarn-server-resourcemanager:${hadoopVer}:tests"
17+
testCompile "org.apache.hadoop:hadoop-yarn-server-resourcemanager:${hadoopVer}:tests"
18+
}
19+
20+
configurations {
21+
myriadSchedulerConf.extendsFrom(runtime)
22+
myriadSchedulerConf.exclude group: 'org.apache.hadoop', module: '*'
1823
}
1924

2025
// copies dependencies to build/libs dir
2126
task copyRunTimeDeps(type: Sync) {
22-
from configurations.runtime
27+
from configurations.myriadSchedulerConf
2328
into "$buildDir/libs"
2429
}
2530

myriad-scheduler/src/main/java/com/ebay/myriad/Main.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,13 @@ private void validateNMInstances(Injector injector) {
163163
NMProfileManager profileManager = injector.getInstance(NMProfileManager.class);
164164
long maxCpu = Long.MIN_VALUE;
165165
long maxMem = Long.MIN_VALUE;
166-
for (String profile : nmInstances.keySet()) {
166+
for (Map.Entry<String, Integer> entry : nmInstances.entrySet()) {
167+
String profile = entry.getKey();
167168
NMProfile nmProfile = profileManager.get(profile);
168169
if (nmProfile == null) {
169170
throw new RuntimeException("Invalid profile name '" + profile + "' specified in 'nmInstances'");
170171
}
171-
if (nmInstances.get(profile) > 0) {
172+
if (entry.getValue() > 0) {
172173
if (nmProfile.getCpus() > maxCpu) { // find the profile with largest number of cpus
173174
maxCpu = nmProfile.getCpus();
174175
maxMem = nmProfile.getMemory(); // use the memory from the same profile
@@ -184,8 +185,8 @@ private void validateNMInstances(Injector injector) {
184185
private void startNMInstances(Injector injector) {
185186
Map<String, Integer> nmInstances = injector.getInstance(MyriadConfiguration.class).getNmInstances();
186187
MyriadOperations myriadOperations = injector.getInstance(MyriadOperations.class);
187-
for (String profile : nmInstances.keySet()) {
188-
myriadOperations.flexUpCluster(nmInstances.get(profile), profile);
188+
for (Map.Entry<String, Integer> entry : nmInstances.entrySet()) {
189+
myriadOperations.flexUpCluster(entry.getValue(), entry.getKey());
189190
}
190191
}
191192

myriad-scheduler/src/main/java/com/ebay/myriad/policy/LeastAMNodesFirstPolicy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private void onNodeUpdated(NodeUpdateSchedulerEvent event) {
122122

123123
private void onNodeRemoved(NodeRemovedSchedulerEvent event) {
124124
SchedulerNode schedulerNode = schedulerNodes.get(event.getRemovedRMNode().getNodeID().getHost());
125-
if (schedulerNode.getNodeID().equals(event.getRemovedRMNode().getNodeID())) {
125+
if (schedulerNode != null && schedulerNode.getNodeID().equals(event.getRemovedRMNode().getNodeID())) {
126126
schedulerNodes.remove(schedulerNode.getNodeID().getHost());
127127
}
128128
}

myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/event/handlers/ResourceOffersEventHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.ebay.myriad.state.SchedulerState;
2323
import com.lmax.disruptor.EventHandler;
2424

25+
import java.util.Iterator;
2526
import org.apache.commons.collections.CollectionUtils;
2627
import org.apache.mesos.Protos;
2728
import org.apache.mesos.Protos.Offer;
@@ -75,7 +76,8 @@ public void onEvent(ResourceOffersEvent event, long sequence,
7576
try {
7677
Set<Protos.TaskID> pendingTasks = schedulerState.getPendingTaskIds();
7778
if (CollectionUtils.isNotEmpty(pendingTasks)) {
78-
for (Offer offer : offers) {
79+
for (Iterator<Offer> iterator = offers.iterator(); iterator.hasNext();) {
80+
Offer offer = iterator.next();
7981
boolean offerMatch = false;
8082
Protos.TaskID launchedTaskId = null;
8183
for (Protos.TaskID pendingTaskId : pendingTasks) {
@@ -100,6 +102,7 @@ public void onEvent(ResourceOffersEvent event, long sequence,
100102
taskToLaunch.setHostname(offer.getHostname());
101103
taskToLaunch.setSlaveId(offer.getSlaveId());
102104
offerMatch = true;
105+
iterator.remove(); // remove the used offer from offers list
103106
break;
104107
}
105108
}

myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/fgs/OfferLifecycleManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.ebay.myriad.scheduler.MyriadDriver;
44
import java.util.HashMap;
5-
import java.util.List;
65
import java.util.Map;
76
import java.util.concurrent.ConcurrentHashMap;
87

myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/yarn/interceptor/CompositeInterceptor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ public void afterSchedulerEventHandled(SchedulerEvent event) {
108108
private NodeId getNodeIdForSchedulerEvent(SchedulerEvent event) {
109109
switch (event.getType()) {
110110
case NODE_ADDED:
111-
return ((NodeAddedSchedulerEvent)event).getAddedRMNode().getNodeID();
111+
return ((NodeAddedSchedulerEvent) event).getAddedRMNode().getNodeID();
112112
case NODE_REMOVED:
113-
return ((NodeRemovedSchedulerEvent)event).getRemovedRMNode().getNodeID();
113+
return ((NodeRemovedSchedulerEvent) event).getRemovedRMNode().getNodeID();
114114
case NODE_UPDATE:
115-
return ((NodeUpdateSchedulerEvent)event).getRMNode().getNodeID();
115+
return ((NodeUpdateSchedulerEvent) event).getRMNode().getNodeID();
116116
case NODE_RESOURCE_UPDATE:
117-
return ((NodeResourceUpdateSchedulerEvent)event).getRMNode().getNodeID();
117+
return ((NodeResourceUpdateSchedulerEvent) event).getRMNode().getNodeID();
118118
}
119119
return null;
120120
}

myriad-scheduler/src/main/java/com/ebay/myriad/scheduler/yarn/interceptor/YarnSchedulerInterceptor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
*/
1717
public interface YarnSchedulerInterceptor {
1818

19+
/**
20+
* Filters the method callbacks.
21+
*/
1922
interface CallBackFilter {
2023
/**
2124
* Method to determine if any other methods in {@link YarnSchedulerInterceptor}

myriad-scheduler/src/test/java/com/ebay/myriad/scheduler/TestMyriadScheduler.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package com.ebay.myriad.scheduler;
22

3-
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertNotNull;
5-
6-
import com.ebay.myriad.scheduler.fgs.NodeStore;
3+
import com.ebay.myriad.scheduler.yarn.MyriadFairScheduler;
74
import java.io.IOException;
8-
95
import org.apache.hadoop.conf.Configuration;
106
import org.apache.hadoop.yarn.conf.YarnConfiguration;
117
import org.apache.hadoop.yarn.event.AsyncDispatcher;
@@ -22,9 +18,7 @@
2218
import org.junit.Before;
2319
import org.junit.Test;
2420

25-
import com.ebay.myriad.Main;
26-
import com.ebay.myriad.scheduler.yarn.MyriadFairScheduler;
27-
import com.google.inject.Injector;
21+
import static org.junit.Assert.assertEquals;
2822

2923
/**
3024
* Tests myriad scheduler.
@@ -79,11 +73,7 @@ public Configuration createConfiguration() {
7973
}
8074

8175
@Test
82-
public void testNodeStore() throws Exception {
83-
Injector injector = Main.getInjector();
84-
// TODO (Kannan Rajah) Find a better way to inject instances
85-
NodeStore nodeStore = injector.getInstance(NodeStore.class);
86-
76+
public void testClusterMemory() throws Exception {
8777
// Add a node
8878
RMNode node1 =
8979
MockNodes
@@ -92,8 +82,6 @@ public void testNodeStore() throws Exception {
9282
scheduler.handle(nodeEvent1);
9383
assertEquals(1024, scheduler.getClusterResource().getMemory());
9484

95-
assertNotNull(nodeStore.getNode("127.0.0.1"));
96-
9785
// Add another node
9886
RMNode node2 =
9987
MockNodes.newNodeInfo(1, Resources.createResource(512), 2, "127.0.0.2");

0 commit comments

Comments
 (0)