[Gradle] Provide relevant error message on daemon crash
#KT-59191 Fixed Related to KT-55385
This commit is contained in:
committed by
Space Team
parent
274ac76959
commit
14460db8e5
+3
-1
@@ -245,6 +245,8 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
|||||||
}
|
}
|
||||||
bufferingMessageCollector.flush(messageCollector)
|
bufferingMessageCollector.flush(messageCollector)
|
||||||
exitCodeFromProcessExitCode(log, res.get())
|
exitCodeFromProcessExitCode(log, res.get())
|
||||||
|
} catch (e: RemoteException) {
|
||||||
|
throw DaemonCrashedException(e)
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
bufferingMessageCollector.flush(messageCollector)
|
bufferingMessageCollector.flush(messageCollector)
|
||||||
if (e is OutOfMemoryError || e.hasOOMCause()) {
|
if (e is OutOfMemoryError || e.hasOOMCause()) {
|
||||||
@@ -253,7 +255,7 @@ internal class GradleKotlinCompilerWork @Inject constructor(
|
|||||||
throw e
|
throw e
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
val memoryUsageAfterBuild = daemon.getUsedMemory(withGC = false).takeIf { it.isGood }?.get()
|
val memoryUsageAfterBuild = runCatching { daemon.getUsedMemory(withGC = false).takeIf { it.isGood }?.get() }.getOrNull()
|
||||||
|
|
||||||
if (memoryUsageAfterBuild == null || memoryUsageBeforeBuild == null) {
|
if (memoryUsageAfterBuild == null || memoryUsageBeforeBuild == null) {
|
||||||
log.debug("Unable to calculate memory usage")
|
log.debug("Unable to calculate memory usage")
|
||||||
|
|||||||
+7
-1
@@ -43,13 +43,16 @@ internal const val kotlinInProcessOOMHelperMessage = "Not enough memory to run c
|
|||||||
|
|
||||||
internal const val kotlinOutOfProcessOOMHelperMessage = "Not enough memory to run compilation."
|
internal const val kotlinOutOfProcessOOMHelperMessage = "Not enough memory to run compilation."
|
||||||
|
|
||||||
|
private const val kotlinDaemonCrashedMessage =
|
||||||
|
"Connection to the Kotlin daemon has been unexpectedly lost. This might be caused by the daemon being killed by another process or the operating system, or by JVM crash."
|
||||||
|
|
||||||
internal fun Throwable.hasOOMCause(): Boolean = when (cause) {
|
internal fun Throwable.hasOOMCause(): Boolean = when (cause) {
|
||||||
is OutOfMemoryError -> true
|
is OutOfMemoryError -> true
|
||||||
else -> cause?.hasOOMCause() ?: false
|
else -> cause?.hasOOMCause() ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Exception thrown when [ExitCode] != [ExitCode.OK]. */
|
/** Exception thrown when [ExitCode] != [ExitCode.OK]. */
|
||||||
internal open class FailedCompilationException(message: String) : RuntimeException(message)
|
internal open class FailedCompilationException(message: String, cause: Throwable? = null) : RuntimeException(message, cause)
|
||||||
|
|
||||||
/** Exception thrown when [ExitCode] == [ExitCode.COMPILATION_ERROR]. */
|
/** Exception thrown when [ExitCode] == [ExitCode.COMPILATION_ERROR]. */
|
||||||
internal class CompilationErrorException(message: String) : FailedCompilationException(message)
|
internal class CompilationErrorException(message: String) : FailedCompilationException(message)
|
||||||
@@ -57,6 +60,9 @@ internal class CompilationErrorException(message: String) : FailedCompilationExc
|
|||||||
/** Exception thrown when [ExitCode] == [ExitCode.OOM_ERROR]. */
|
/** Exception thrown when [ExitCode] == [ExitCode.OOM_ERROR]. */
|
||||||
internal class OOMErrorException(message: String) : FailedCompilationException(message)
|
internal class OOMErrorException(message: String) : FailedCompilationException(message)
|
||||||
|
|
||||||
|
/** Exception thrown when during the compilation [java.rmi.RemoteException] is caught */
|
||||||
|
internal class DaemonCrashedException(cause: Throwable) : FailedCompilationException(kotlinDaemonCrashedMessage, cause)
|
||||||
|
|
||||||
internal fun TaskWithLocalState.cleanOutputsAndLocalState(reason: String? = null) {
|
internal fun TaskWithLocalState.cleanOutputsAndLocalState(reason: String? = null) {
|
||||||
val log = GradleKotlinLogger(logger)
|
val log = GradleKotlinLogger(logger)
|
||||||
cleanOutputsAndLocalState(allOutputFiles(), log, metrics.get(), reason)
|
cleanOutputsAndLocalState(allOutputFiles(), log, metrics.get(), reason)
|
||||||
|
|||||||
Reference in New Issue
Block a user