[
https://issues.apache.org/jira/browse/STORM-183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14033088#comment-14033088
]
ASF GitHub Bot commented on STORM-183:
--------------------------------------
Github user Parth-Brahmbhatt commented on a diff in the pull request:
https://github.com/apache/incubator-storm/pull/143#discussion_r13833622
--- Diff: storm-core/src/clj/backtype/storm/util.clj ---
@@ -388,13 +388,51 @@
(catch IOException e
(log-message "Could not extract " dir " from " jarpath))))
-(defn ensure-process-killed! [pid]
+(defn sleep-secs [secs]
+ (when (pos? secs)
+ (Time/sleep (* (long secs) 1000))))
+
+(defn sleep-until-secs [target-secs]
+ (Time/sleepUntil (* (long target-secs) 1000)))
+
+(def ^:const sig-kill 9)
+
+(def ^:const sig-term 15)
+
+(defn send-signal-to-process
+ [pid signum]
+ (try-cause
+ (exec-command! (str (if on-windows?
+ (if (== signum sig-kill) "taskkill /f /pid "
"taskkill /pid ")
+ (str "kill -" signum " "))
+ pid))
+ (catch ExecuteException e
+ (log-message "Error when trying to kill " pid ". Process is probably
already dead."))))
+
+(defn force-kill-process
+ [pid]
+ (send-signal-to-process pid sig-kill))
+
+(defn kill-process-with-sig-term
+ [pid]
+ (send-signal-to-process pid sig-term))
+
+(defn ensure-process-killed!
+ [pid]
;; TODO: should probably do a ps ax of some sort to make sure it was
killed
(try-cause
- (exec-command! (str (if on-windows? "taskkill /f /pid " "kill -9 ")
pid))
+ (kill-process-with-sig-term pid)
(catch ExecuteException e
(log-message "Error when trying to kill " pid ". Process is probably
already dead."))))
+(defn add-shutdown-hook-with-force-kill-in-1-sec
--- End diff --
You are right, I want to avoid a model where people have to call
(.addShutdownHook blah blah) and then remember to call
(add-shutdown-hook-with-force-kill-in-1-sec).
How about adding the use function and the actual forcing function as two
seperate shutdown hook threads?
(defn add-shutdown-hook-with-force-kill-in-1-sec
[func]
(.addShutdownHook (Runtime/getRuntime) (Thread. #(func)))
(.addShutdownHook (Runtime/getRuntime) (Thread. #((sleep-secs 1)
(.halt
(RunTime/getRunTime) 20)))))
> Supervisor/worker shutdown hook should be called in distributed mode.
> ---------------------------------------------------------------------
>
> Key: STORM-183
> URL: https://issues.apache.org/jira/browse/STORM-183
> Project: Apache Storm (Incubating)
> Issue Type: Bug
> Reporter: caofangkun
> Priority: Minor
> Attachments: STORM-183-1.patch
>
>
> if the process is killed forcefully from the OS or if it's crashing due to
> resource issues (e.g., out of memory), shutdown hooks won't be invoked.
> -TERM (15)
> The process is requested to stop running; it should try to exit cleanly
> -KILL (9)
> The process will be killed by the kernel; this signal cannot be ignored.
> So should we better use 'kill -15' ?
> See:
> https://github.com/apache/incubator-storm/blob/master/storm-core/src/clj/backtype/storm/util.clj#L392
> https://github.com/apache/incubator-storm/blob/master/storm-core/src/clj/backtype/storm/daemon/supervisor.clj#L175
> will never be called for supervisor:
> https://github.com/apache/incubator-storm/blob/master/storm-core/src/clj/backtype/storm/daemon/supervisor.clj#L396
> will never be called for worker:
> https://github.com/apache/incubator-storm/blob/master/storm-core/src/clj/backtype/storm/daemon/worker.clj#L421
> We'd better add something like :
> (.addShutdownHook (Runtime/getRuntime) (Thread. (fn [] (.shutdown mk-sv))))))
> ?
--
This message was sent by Atlassian JIRA
(v6.2#6252)