From 7da97367d2c0e0f9adfc0835e88a23f000d7764a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludovic.courtes@inria.fr> Date: Tue, 27 Nov 2018 11:06:22 +0100 Subject: [PATCH] Use <kernel> records to represent proxies. * guix-jupyter-kernel.scm (<proxy>): Remove. (register-proxy): Add docstring. (new-container-connect): Return a <kernel> object. (reply-execute-request, kill-containers): Adjust accordingly. --- guix-jupyter-kernel.scm | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/guix-jupyter-kernel.scm b/guix-jupyter-kernel.scm index fa5476e..3e54b75 100644 --- a/guix-jupyter-kernel.scm +++ b/guix-jupyter-kernel.scm @@ -19,7 +19,6 @@ (use-modules (json) (simple-zmq) (srfi srfi-1) - (srfi srfi-9) (srfi srfi-11) (srfi srfi-13) (srfi srfi-19) @@ -43,14 +42,6 @@ (seed->random-state (time-second (current-time time-utc))))) -;; Kernel proxy running in a container. -(define-record-type <proxy> - (proxy pid socket start) - proxy? - (pid proxy-pid) ;integer - (socket proxy-socket) ;zmq socket - (start proxy-start-time)) ;integer - ;; ;; Container tools. ;; @@ -62,6 +53,8 @@ (+ (string-rindex (car (command-line)) #\/) 1))) (define (register-proxy vhash name proxy) + "Register PROXY, a kernel object for a process running in a container that +acts as a proxy to an actual kernel." (vhash-cons name proxy vhash)) (define (proxy-by-name vhash name) @@ -135,12 +128,12 @@ (container (new-container-connect env-name id)) (new (register-proxy containers env-name container))) - (relay-message (proxy-socket container) kernel + (relay-message (kernel-shell container) kernel (string->utf8 env-name) message) (values new (+ count 1)))) - ((? proxy? proxy) - (relay-message (proxy-socket proxy) kernel + ((? kernel? proxy) + (relay-message (kernel-shell proxy) kernel (string->utf8 env-name) message) (values containers (+ count 1)))))) @@ -149,7 +142,7 @@ (let* ((list (string-split magic #\ )) (env-name (list-ref list 2)) (proxy (proxy-by-name containers env-name))) - (relay-message (proxy-socket proxy) kernel + (relay-message (kernel-shell proxy) kernel (string->utf8 env-name) message) (values containers (+ count 1)))) @@ -159,7 +152,7 @@ (delete-magic code) count))) (else - (relay-message (proxy-socket + (relay-message (kernel-shell (proxy-by-name containers "default")) kernel (string->utf8 "default") message) @@ -202,11 +195,11 @@ MESSAGE." ((name . proxy) (format (current-error-port) "terminating proxy ~s (PID ~s)...~%" - name (proxy-pid proxy)) - (relay-message (proxy-socket proxy) kernel + name (kernel-pid proxy)) + (relay-message (kernel-shell proxy) kernel (string->utf8 name) message) - (zmq-close-socket (proxy-socket proxy)) - (false-if-exception (kill (proxy-pid proxy) SIGTERM)))) + (zmq-close-socket (kernel-shell proxy)) + (false-if-exception (kill (kernel-pid proxy) SIGTERM)))) containers)) ;; @@ -214,7 +207,7 @@ MESSAGE." ;; (define (new-container-connect name pid) - "Return a proxy object for process PID." + "Return a kernel object for process PID." (let* ((ipc-dir (string-append "/tmp/guix-kernel/ipc/" name "-" (number->string session-id) "/")) (container-addr (string-append "ipc://" ipc-dir)) @@ -228,7 +221,9 @@ MESSAGE." (zmq-bind-socket container-socket container-addr-sock) (display "+") - (proxy pid container-socket (current-time time-utc))))) + (kernel name pid + #:shell container-socket + #:iosub container-socket)))) (define %network-file-systems ;; The list of <file-system> objects corresponding to bind-mounts required -- GitLab