actors: Automatically add cookie by default in hive-create-actor.
[8sync.git] / 8sync / actors.scm
index 8aa38e325f5f2dfe6b79577d0d8ff5486dbcb666..9a0bb30f18488019cef1ebba7b64fb5ea4d098e9 100644 (file)
@@ -440,7 +440,7 @@ to come after class definition."
 
 (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)))
 
@@ -647,11 +647,13 @@ that method for documentation."
     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))
 
@@ -705,8 +707,13 @@ Like create-actor, but permits supplying an id-cookie."
                       init id-cookie))
 
 
-(define (self-destruct actor)
-  "Remove an actor from the hive."
+(define* (self-destruct actor #:key (clean-up #t))
+  "Remove an actor from the hive.
+
+Unless #:clean-up is set to #f, this will first have the actor handle
+its '*clean-up* action handler."
+  (when clean-up
+    (<-wait actor (actor-id actor) '*clean-up*))
   (hash-remove! (hive-actor-registry (actor-hive actor))
                 (actor-id actor)))
 
@@ -715,7 +722,8 @@ Like create-actor, but permits supplying an id-cookie."
 ;;; 8sync bootstrap utilities
 ;;; =========================
 
-(define* (run-hive hive initial-tasks)
+(define* (run-hive hive initial-tasks
+                   #:key (clean-up #t))
   "Start up an agenda and run HIVE in it with INITIAL-TASKS."
   (dynamic-wind
     (const #f)
@@ -726,7 +734,8 @@ Like create-actor, but permits supplying an id-cookie."
         (start-agenda agenda)))
     ;; Run clean-up
     (lambda ()
-      (run-hive-clean-up hive))))
+      (when clean-up
+        (run-hive-clean-up hive)))))
 
 (define (run-hive-clean-up hive)
   (let ((queue (list->q (list (bootstrap-message hive (actor-id hive)