Cleaned up how errors are managed
This commit is contained in:
parent
8b62dbb063
commit
2d061220f5
|
@ -146,37 +146,37 @@ internal class AeronDriverInternal(endPoint: EndPoint<*>?, config: Configuration
|
||||||
error.cause is BindException ||
|
error.cause is BindException ||
|
||||||
error.cause is SocketException ||
|
error.cause is SocketException ||
|
||||||
error.cause is IOException) {
|
error.cause is IOException) {
|
||||||
|
|
||||||
// this is bad! We must close this connection. THIS WILL BE CALLED AS FAST AS THE CPU CAN RUN (because of how aeron works).
|
// this is bad! We must close this connection. THIS WILL BE CALLED AS FAST AS THE CPU CAN RUN (because of how aeron works).
|
||||||
if (!mustRestartDriverOnError) {
|
if (!mustRestartDriverOnError) {
|
||||||
mustRestartDriverOnError = true
|
mustRestartDriverOnError = true
|
||||||
|
|
||||||
logger.error { "Aeron Driver [$driverId]: Critical driver error!" }
|
|
||||||
|
|
||||||
EventDispatcher.ERROR.launch {
|
|
||||||
endPointUsages.forEach {
|
|
||||||
it.close(closeEverything = false,
|
|
||||||
notifyDisconnect = false,
|
|
||||||
releaseWaitingThreads = false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error.message?.startsWith("ERROR - channel error - Network is unreachable") == true) {
|
if (error.message?.startsWith("ERROR - channel error - Network is unreachable") == true) {
|
||||||
val exception = AeronDriverException("Network is disconnected or unreachable.")
|
val exception = AeronDriverException("Aeron Driver [$driverId]: Network is disconnected or unreachable.")
|
||||||
exception.cleanAllStackTrace()
|
exception.cleanAllStackTrace()
|
||||||
notifyError(exception)
|
notifyError(exception)
|
||||||
} else if (error.message?.startsWith("WARN - failed to send") == true) {
|
} else if (error.message?.startsWith("WARN - failed to send") == true) {
|
||||||
val exception = AeronDriverException("Network socket error, can't send data.")
|
val exception = AeronDriverException("Aeron Driver [$driverId]: Network socket error, can't send data.")
|
||||||
exception.cleanAllStackTrace()
|
exception.cleanAllStackTrace()
|
||||||
notifyError(exception)
|
notifyError(exception)
|
||||||
}
|
}
|
||||||
else if (error.message == "Can't assign requested address") {
|
else if (error.message == "Can't assign requested address") {
|
||||||
val exception = AeronDriverException("Network socket error, can't assign requested address.")
|
val exception = AeronDriverException("Aeron Driver [$driverId]: Network socket error, can't assign requested address.")
|
||||||
exception.cleanAllStackTrace()
|
exception.cleanAllStackTrace()
|
||||||
notifyError(exception)
|
notifyError(exception)
|
||||||
} else {
|
} else {
|
||||||
error.cleanStackTrace()
|
error.cleanStackTrace()
|
||||||
// send this out to the listener-manager so we can be notified of global errors
|
// send this out to the listener-manager so we can be notified of global errors
|
||||||
notifyError(AeronDriverException(error.cause!!))
|
notifyError(AeronDriverException("Aeron Driver [$driverId]: Unexpected error!", error.cause!!))
|
||||||
|
}
|
||||||
|
|
||||||
|
// we must close all the connections on a DIFFERENT thread!
|
||||||
|
EventDispatcher.CLOSE.launch {
|
||||||
|
endPointUsages.forEach {
|
||||||
|
it.close(closeEverything = false,
|
||||||
|
notifyDisconnect = false,
|
||||||
|
releaseWaitingThreads = false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue