in plugin-azure-agent/src/main/kotlin/jetbrains/buildServer/clouds/azure/SpotInstanceTerminationCheckerImpl.kt [17:48]
override fun start(resourceName: String) {
LOG.info("Subscribe on Azure scheduledEvents metadata")
val task = Runnable {
val eventsMetadata = try {
AzureMetadata.readScheduledEventsMetadata()
} catch (e: Throwable) {
LOG.info("Azure scheduledEvents metadata is not available: ${e.message}")
LOG.debug(e)
null
}
eventsMetadata?.events?.firstOrNull {
PREEMPT_EVENT_TYPE == it.eventType &&
(it.resources ?: emptyList()).contains(resourceName) &&
RESOURCE_TYPE == it.resourceType
}?.let {
LOG.info("The spot instance is scheduled for eviction at ${it.notBefore}")
val currentBuild = myBuildTracker.currentBuild as AgentRunningBuildEx?
currentBuild?.buildLogger?.logMessage(DefaultMessagesInfo.createTextMessage(String.format("The spot instance is scheduled for eviction at ${it.notBefore}.")))
try {
AzureMetadata.approveEvent(eventsMetadata.documentIncarnation, it.eventId)
} catch (e: Throwable) {
LOG.info("Could not approve Azure scheduled event: ${it.eventId}, message: ${e.message}")
LOG.debug(e)
}
myCancellable.cancel()
}
}
myCancellable = myScheduler.scheduleWithFixedDelay(task, 0, 1, TimeUnit.SECONDS)
}