Github user rxin commented on a diff in the pull request:
https://github.com/apache/spark/pull/12605#discussion_r60703413
--- Diff: core/src/main/scala/org/apache/spark/util/SignalUtils.scala ---
@@ -31,14 +31,51 @@ import org.apache.spark.internal.Logging
/**
* Contains utilities for working with posix signals.
*/
-private[spark] object Signaling extends Logging {
+private[spark] object SignalUtils extends Logging {
+
+ private var registered = false
+
+ /** Register a signal handler to log signals on UNIX-like systems. */
+ def registerLogger(log: Logger): Unit = synchronized {
+ if (!registered) {
+ Seq("TERM", "HUP", "INT").foreach { sig =>
+ SignalUtils.register(sig) {
+ log.error("RECEIVED SIGNAL " + sig)
+ false
+ }
+ }
+ registered = true
+ }
+ }
+
+ /**
+ * Adds an action to be run when a given signal is received by this
process.
+ *
+ * Note that signals are only supported on unix-like operating systems
and work on a best-effort
+ * basis: if a signal is not available or cannot be intercepted, only a
warning is emitted.
+ *
+ * All actions for a given signal are run in a separate thread.
+ */
+ def register(signal: String)(action: => Boolean): Unit = synchronized {
+ if (SystemUtils.IS_OS_UNIX) {
+ try {
+ val handler = handlers.getOrElseUpdate(signal, {
+ logInfo("Registered signal handler for " + signal)
+ new ActionHandler(new Signal(signal))
+ })
+ handler.register(action)
+ } catch {
+ case ex: Exception => logWarning(s"Failed to register signal
handler for " + signal, ex)
+ }
+ }
+ }
/**
* A handler for the given signal that runs a collection of actions.
*/
private class ActionHandler(signal: Signal) extends SignalHandler {
- private val actions = Collections.synchronizedList(new LinkedList[()
=> Boolean])
+ private val actions = Collections.synchronizedList(new
java.util.LinkedList[() => Boolean])
--- End diff --
It just gets confusing when we mix scala and java collections so i thought
i would just fully qualify them.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]