Skip to content

Commit e6494dc

Browse files
committed
Refactor class loading
1 parent 8207428 commit e6494dc

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

core/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackend.scala

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,15 @@ private[spark] class MesosSchedulerBackend(
205205
offer.getHostname,
206206
getResource(offer.getResourcesList, "cpus").toInt)
207207

208+
private def inClassLoader()(fun: => Unit) = {
209+
val oldClassLoader = setClassLoader()
210+
try {
211+
fun
212+
} finally {
213+
restoreClassLoader(oldClassLoader)
214+
}
215+
}
216+
208217
override def disconnected(d: SchedulerDriver) {}
209218

210219
override def reregistered(d: SchedulerDriver, masterInfo: MasterInfo) {}
@@ -215,8 +224,7 @@ private[spark] class MesosSchedulerBackend(
215224
* tasks are balanced across the cluster.
216225
*/
217226
override def resourceOffers(d: SchedulerDriver, offers: JList[Offer]) {
218-
val oldClassLoader = setClassLoader()
219-
try {
227+
inClassLoader() {
220228
val (acceptedOffers, declinedOffers) = offers.partition(o => {
221229
val mem = getResource(o.getResourcesList, "mem")
222230
val slaveId = o.getSlaveId.getValue
@@ -233,11 +241,11 @@ private[spark] class MesosSchedulerBackend(
233241
scheduler.resourceOffers(offerableWorkers)
234242
.filter(!_.isEmpty)
235243
.foreach(_.foreach(taskDesc => {
236-
val slaveId = taskDesc.executorId
237-
slaveIdsWithExecutors += slaveId
238-
taskIdToSlaveId(taskDesc.taskId) = slaveId
239-
mesosTasks.getOrElseUpdate(slaveId, new JArrayList[MesosTaskInfo])
240-
.add(createMesosTask(taskDesc, slaveId))
244+
val slaveId = taskDesc.executorId
245+
slaveIdsWithExecutors += slaveId
246+
taskIdToSlaveId(taskDesc.taskId) = slaveId
247+
mesosTasks.getOrElseUpdate(slaveId, new JArrayList[MesosTaskInfo])
248+
.add(createMesosTask(taskDesc, slaveId))
241249
}))
242250

243251
// Reply to the offers
@@ -250,8 +258,6 @@ private[spark] class MesosSchedulerBackend(
250258
}
251259

252260
declinedOffers.foreach(o => d.declineOffer(o.getId))
253-
} finally {
254-
restoreClassLoader(oldClassLoader)
255261
}
256262
}
257263

@@ -290,8 +296,7 @@ private[spark] class MesosSchedulerBackend(
290296
}
291297

292298
override def statusUpdate(d: SchedulerDriver, status: TaskStatus) {
293-
val oldClassLoader = setClassLoader()
294-
try {
299+
inClassLoader() {
295300
val tid = status.getTaskId.getValue.toLong
296301
val state = TaskState.fromMesos(status.getState)
297302
synchronized {
@@ -304,18 +309,13 @@ private[spark] class MesosSchedulerBackend(
304309
}
305310
}
306311
scheduler.statusUpdate(tid, state, status.getData.asReadOnlyByteBuffer)
307-
} finally {
308-
restoreClassLoader(oldClassLoader)
309312
}
310313
}
311314

312315
override def error(d: SchedulerDriver, message: String) {
313-
val oldClassLoader = setClassLoader()
314-
try {
316+
inClassLoader() {
315317
logError("Mesos error: " + message)
316318
scheduler.error(message)
317-
} finally {
318-
restoreClassLoader(oldClassLoader)
319319
}
320320
}
321321

@@ -332,15 +332,12 @@ private[spark] class MesosSchedulerBackend(
332332
override def frameworkMessage(d: SchedulerDriver, e: ExecutorID, s: SlaveID, b: Array[Byte]) {}
333333

334334
private def recordSlaveLost(d: SchedulerDriver, slaveId: SlaveID, reason: ExecutorLossReason) {
335-
val oldClassLoader = setClassLoader()
336-
try {
335+
inClassLoader() {
337336
logInfo("Mesos slave lost: " + slaveId.getValue)
338337
synchronized {
339338
slaveIdsWithExecutors -= slaveId.getValue
340339
}
341340
scheduler.executorLost(slaveId.getValue, reason)
342-
} finally {
343-
restoreClassLoader(oldClassLoader)
344341
}
345342
}
346343

0 commit comments

Comments
 (0)