Author: psmith Date: Mon Feb 5 22:43:57 2007 New Revision: 74
Modified: branches/home/psmith/restructure/src/io/async-fd.lisp branches/home/psmith/restructure/src/io/nio-package.lisp branches/home/psmith/restructure/src/io/nio-server.lisp branches/home/psmith/restructure/src/nio-logger/nio-logger.asd branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Log: Changes for server close
Modified: branches/home/psmith/restructure/src/io/async-fd.lisp ============================================================================== --- branches/home/psmith/restructure/src/io/async-fd.lisp (original) +++ branches/home/psmith/restructure/src/io/async-fd.lisp Mon Feb 5 22:43:57 2007 @@ -43,7 +43,8 @@ (write-ready :initform nil :accessor write-ready :documentation "Have we been notified as write ready and not received EAGAIN from %write?") - (close-pending :initform nil) + (close-pending :initform nil + :accessor close-pending) (socket :initarg :socket :accessor socket)))
@@ -151,7 +152,7 @@ (error 'not-implemented-yet))))
#+nio-debug (format t "write buffer after write :~A~%" foreign-write-buffer) - (when (eql (remaining foreign-write-buffer) 0) + (when (eql (buffer-position foreign-write-buffer) 0) (when close-pending (close-async-fd async-fd)))))
Modified: branches/home/psmith/restructure/src/io/nio-package.lisp ============================================================================== --- branches/home/psmith/restructure/src/io/nio-package.lisp (original) +++ branches/home/psmith/restructure/src/io/nio-package.lisp Mon Feb 5 22:43:57 2007 @@ -30,7 +30,7 @@
;; async-fd.lisp async-fd process-read process-write foreign-read-buffer foreign-write-buffer close-sm - recommend-buffer-size + recommend-buffer-size close-pending
;; async-socket.lisp
Modified: branches/home/psmith/restructure/src/io/nio-server.lisp ============================================================================== --- branches/home/psmith/restructure/src/io/nio-server.lisp (original) +++ branches/home/psmith/restructure/src/io/nio-server.lisp Mon Feb 5 22:43:57 2007 @@ -39,7 +39,8 @@
;loop over hashtable (defun process-async-fds (client-hash) - (maphash #'(lambda (k async-fd) + (let ((removals nil)) + (maphash #'(lambda (k async-fd) (format-log t "Dealing with ~a => ~a~%" k async-fd) ;process reads @@ -50,9 +51,16 @@ ;process-writes (process-write async-fd) (when (and (write-ready async-fd) - (> (buffer-position (foreign-write-buffer async-fd)) 0)) - (write-more async-fd))) - client-hash)) + (> (buffer-position (foreign-write-buffer async-fd)) 0)) + (write-more async-fd)) + + (when (close-pending async-fd) + (write-more async-fd) + (push async-fd removals))) + client-hash) + (dolist (async-fd removals) + (remhash (async-fd-read-fd async-fd) client-hash)) + (format t "client-hash list ~A~%"client-hash )))
Modified: branches/home/psmith/restructure/src/nio-logger/nio-logger.asd ============================================================================== --- branches/home/psmith/restructure/src/nio-logger/nio-logger.asd (original) +++ branches/home/psmith/restructure/src/nio-logger/nio-logger.asd Mon Feb 5 22:43:57 2007 @@ -8,5 +8,5 @@ (:file "nio-logger" :depends-on ("nio-logger-package")) )
- :depends-on (:nio-yarpc :nio-utils)) + :depends-on (:nio-yarpc :nio-utils :cl-base64))
Modified: branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp ============================================================================== --- branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp (original) +++ branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp Mon Feb 5 22:43:57 2007 @@ -50,7 +50,7 @@ (let ((sm (nio:add-connection ip-address 16323 'nio-yarpc:yarpc-client-state-machine))) (nio-utils:format-log t "toplevel adding conn ~A to ~A~%" sm ip-address) (with-line-from-tailed-file (text filename 1) - (let ((rpc (format nil "(nio-logger:remote-log "~A")" text))) + (let ((rpc (format nil "(nio-logger:remote-log "~A")" (cl-base64:string-to-base64-string text)))) (nio-utils:format-log t "Toplevel Submitting job~A~%" rpc) (nio-utils:format-log t "Result of remote-log ~A~%" (nio-yarpc:remote-execute sm rpc))))))
@@ -67,8 +67,8 @@ ;;block waiting for jobs (nio-yarpc:run-job)))
-(nio-yarpc:defremote remote-log(str) +(nio-yarpc:defremote remote-log(base64-str) (with-open-file (out +log-file-name+ :direction :output :if-exists :append) - (nio-utils:format-log out "~A~%" str)) + (nio-utils:format-log out "~A~%" (cl-base64:base64-string-to-string base64-str))) t)
Modified: branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp ============================================================================== --- branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp (original) +++ branches/home/psmith/restructure/src/protocol/yarpc/yarpc-state-machine.lisp Mon Feb 5 22:43:57 2007 @@ -102,12 +102,14 @@ (define-condition authorization-error (error) ())
(defun execute-call (call-string) + (handler-case (let* ((rpc-call-list (read-from-string call-string )) (fn (member (symbol-function (first rpc-call-list)) *remote-fns* ))) (format-log t "yarpc-state-machine:execute-call - fn ~A authorised? : ~A~%" (symbol-function (first rpc-call-list)) fn) (if fn (apply (first rpc-call-list) (rest rpc-call-list)) - (error 'authorization-error)))) + (error 'authorization-error))) + (reader-error (re) (format-log t "yarpc-state-machine:execute-call - reader error on call-string ~A ~%" re))))
;;end move TODO