this post was submitted on 25 Oct 2023
1 points (100.0% liked)

Lisp

53 readers
3 users here now

founded 1 year ago
MODERATORS
 

I am trying to write a Babashka script that downloads some files from a remote host using an SSH connection. For this, I use the 'epiccastle.bbsh' pod. The problem is that the script does not terminate, it gets stuck at the end of the main thread process. I thought it might be due to the thread pool used by Clojure agents and added the call to '(shutdown-agents)'. However, the script still gets stuck.

My babashka version is 'v1.3.185'.

I have created a minimal version that reproduces the error:

(ns sample
  (:require [babashka.pods :as pods]))

(def bbsh-pod (pods/load-pod 'epiccastle/bbssh "0.5.0"))
(require '[pod.epiccastle.bbssh.core :as ssh])
(require '[pod.epiccastle.bbssh.scp :as scp])

(def user "user")
(def cert "/home/user/.ssh/id_rsa")

;; Main process
(let [session (ssh/ssh "localhost" {:username user :identity cert})
      opts {:session session}]
  (scp/scp-from "/etc/hosts" "remote-hosts" opts)
  (shutdown-agents)
  (println "shutdown"))

The script actually downloads the file, but does not terminate. Am I forgetting something? Is it a problem in Babashka? Could the problem be coming from the pod?

Asciinema Cast: https://asciinema.org/a/Loa2w96lXCzPE6LHtz4N4KGsm

Note: for the asciicast I added a '(System/exit 1)' at the script end and it stills gets stuck.

top 1 comments
sorted by: hot top controversial new old
[–] Borkdude@alien.top 1 points 1 year ago

Strange. Killing the pod manually with (pods/unload-pod bbsh-pod) doesn't work either, it blocks on this call. It might be worth checking out what happens during the "shutdown" op:

https://github.com/epiccastle/bbssh/blob/141f85bdd493e351712c599f271949f77d6e52d1/src/clj/bbssh/impl/pod.clj#L191