处理Master注册的请求
case RegisterApplication(description, driver) =>
// TODO Prevent repeated registrations from some driver
//如果当前master是StandBy Master,不是Active Master,那什么都不会做,如果是其他ALIVE(这是是这个), RECOVERING, COMPLETING_RECOVERY
if (state == RecoveryState.STANDBY) {
// ignore, don't send response
} else {
logInfo("Registering app " + description.name)
//用ApplicationDescriptiong信息,创建ApplicationInfo
val app = createApplication(description, driver)
//注册Application
registerApplication(app)
logInfo("Registered app " + description.name + " with ID " + app.id)
//使用持久化引擎,将ApplicationInfo进行持久化
persistenceEngine.addApplication(app)
//向driver发送RegisteredApplication消息表明master已经注册了这个application
driver.send(RegisteredApplication(app.id, self))
schedule()
}
创建Application
private def createApplication(desc: ApplicationDescription, driver: RpcEndpointRef):
ApplicationInfo = {
//获取时间戳
val now = System.currentTimeMillis()
val date = new Date(now)
//使用date生成ApplicationId
val appId = newApplicationId(date)
//new ApplicationInfo
new ApplicationInfo(now, appId, desc, date, driver, defaultCores)
}
注册Application
private def registerApplication(app: ApplicationInfo): Unit = {
val appAddress = app.driver.address
//如果地址重复则返回
if (addressToApp.contains(appAddress)) {
logInfo("Attempted to re-register application at same address: " + appAddress)
return
}
applicationMetricsSystem.registerSource(app.appSource)
//将app的信息加入内存缓存中
apps += app
idToApp(app.id) = app
//与driver映射
endpointToApp(app.driver) = app
addressToApp(appAddress) = app
//将app的信息加入等待队列-waitingApps
waitingApps += app
}