actor-id-hive
actor-id-string
- actor-am-i-alive?
+ actor-alive?
build-actions
(define %current-actor
(make-parameter #f))
-(define (actor-am-i-alive? actor)
+(define (actor-alive? actor)
(hive-resolve-local-actor (actor-hive actor) (actor-id actor)))
(define-method (hive-gen-actor-id (hive <hive>) cookie)
(make-address (if cookie
- (string-append cookie "-" (big-random-number-string))
+ (string-append cookie ":" (big-random-number-string))
(big-random-number-string))
(hive-id hive)))
actor-id))
(define* (hive-create-actor hive actor-class #:rest init)
+ "Create an actor on HIVE using ACTOR-CLASS passing in INIT args"
(%hive-create-actor hive actor-class
- init #f))
+ init (symbol->string (class-name actor-class))))
(define* (hive-create-actor* hive actor-class id-cookie #:rest init)
- "Create an actor, but also add a 'cookie' to the name for debugging"
+ "Create an actor, but also allow customizing a 'cookie' added to the id
+for debugging"
(%hive-create-actor hive actor-class
init id-cookie))
init id-cookie))
-(define (self-destruct actor)
- "Remove an actor from the hive."
+(define* (self-destruct actor #:key (cleanup #t))
+ "Remove an actor from the hive.
+
+Unless #:cleanup is set to #f, this will first have the actor handle
+its '*cleanup* action handler."
+ (when cleanup
+ (<-wait actor (actor-id actor) '*cleanup*))
(hash-remove! (hive-actor-registry (actor-hive actor))
(actor-id actor)))
;;; 8sync bootstrap utilities
;;; =========================
-(define* (run-hive hive initial-tasks)
+(define* (run-hive hive initial-tasks
+ #:key (cleanup #t))
"Start up an agenda and run HIVE in it with INITIAL-TASKS."
(dynamic-wind
(const #f)
(let* ((queue (list->q initial-tasks))
(agenda (make-agenda #:pre-unwind-handler print-error-and-continue
#:queue queue)))
- (start-agenda agenda)))
+ (run-agenda agenda)))
;; Run cleanup
(lambda ()
- (run-hive-cleanup hive))))
+ (when cleanup
+ (run-hive-cleanup hive)))))
(define (run-hive-cleanup hive)
(let ((queue (list->q (list (bootstrap-message hive (actor-id hive)
'*cleanup-all*)))))
- (start-agenda
+ (run-agenda
(make-agenda #:queue queue))))
(define (bootstrap-message hive to-id action . message-body-args)