Changes have been pushed for the repository "fawkes.git".
(Fawkes Robotics Software Framework)

Clone:  g...@git.fawkesrobotics.org:fawkes.git
Gitweb: http://git.fawkesrobotics.org/fawkes.git
Trac:   http://trac.fawkesrobotics.org

The branch, thofmann/clips-executive-resources has been updated
        to  1e6f98fd5620d17edaa6ea01174301048a874380 (commit)
       via  92a9402576537140a8a8bb4d2266bdaaf7cd5001 (commit)
       via  a49e1016dc3d149b7b37798e7ca4caa49289d71b (commit)
      from  092fae6e00d50f7d7474b5222260cf1295b3d13f (commit)

http://git.fawkesrobotics.org/fawkes.git/thofmann/clips-executive-resources

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- *Log* ---------------------------------------------------------------
commit a49e1016dc3d149b7b37798e7ca4caa49289d71b
Author:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
AuthorDate: Fri Jun 1 12:09:00 2018 +0200
Commit:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
CommitDate: Fri Jun 1 12:09:00 2018 +0200

    clips-executive: release all acquired resources before rejecting a goal
    
    If we fail to acquire one required resource, first release all resources
    that have already been acquired before rejecting the goal. Otherwise,
    the next goal may try to acquire the resource again and fail.

http://git.fawkesrobotics.org/fawkes.git/commit/a49e101
http://trac.fawkesrobotics.org/changeset/a49e101

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 92a9402576537140a8a8bb4d2266bdaaf7cd5001
Author:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
AuthorDate: Fri Jun 1 19:38:06 2018 +0200
Commit:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
CommitDate: Fri Jun 1 19:38:06 2018 +0200

    clips-executive: prepend all resource locks with resource-

http://git.fawkesrobotics.org/fawkes.git/commit/92a9402
http://trac.fawkesrobotics.org/changeset/92a9402

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 1e6f98fd5620d17edaa6ea01174301048a874380
Author:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
AuthorDate: Fri Jun 1 19:39:05 2018 +0200
Commit:     Till Hofmann <hofm...@kbsg.rwth-aachen.de>
CommitDate: Fri Jun 1 19:39:05 2018 +0200

    clips-executive: treat errors during resource locking as rejections

http://git.fawkesrobotics.org/fawkes.git/commit/1e6f98f
http://trac.fawkesrobotics.org/changeset/1e6f98f

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- *Summary* -----------------------------------------------------------
 .../clips-executive/clips/resource-locks.clp       |   75 +++++++++++++++----
 1 files changed, 59 insertions(+), 16 deletions(-)


- *Diffs* -------------------------------------------------------------

- *commit* a49e1016dc3d149b7b37798e7ca4caa49289d71b - - - - - - - - - -
Author:  Till Hofmann <hofm...@kbsg.rwth-aachen.de>
Date:    Fri Jun 1 12:09:00 2018 +0200
Subject: clips-executive: release all acquired resources before rejecting a goal

 .../clips-executive/clips/resource-locks.clp       |   43 +++++++++++++++-----
 1 files changed, 32 insertions(+), 11 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-executive/clips/resource-locks.clp 
b/src/plugins/clips-executive/clips/resource-locks.clp
index a708a10..b541001 100644
--- a/src/plugins/clips-executive/clips/resource-locks.clp
+++ b/src/plugins/clips-executive/clips/resource-locks.clp
@@ -22,14 +22,12 @@
 (defrule resource-locks-request-lock
   (goal (mode COMMITTED)
         (acquired-resources $?acq)
-        (required-resources $?req&:(set-diff ?req ?acq)))
-  (not (mutex (name ?res) (request ~NONE)))
+        (required-resources $?req)
+  (not (mutex (name ?n&:(member$ ?n ?req)) (request ~NONE)))
   =>
   (foreach ?res (set-diff ?req ?acq)
-    (if (not (any-factp ((?m mutex)) (neq ?m:request NONE))) then
-      (printout warn "Trying to lock " ?res crlf)
-      (mutex-try-lock-async ?res)
-    )
+    (printout warn "Trying to lock " ?res crlf)
+    (mutex-try-lock-async ?res)
   )
 )
 
@@ -43,17 +41,41 @@
   (modify ?m (request NONE) (response NONE))
 )
 
-(defrule resource-locks-lock-rejected
+; TODO: deal with mutex errors (response ERROR)
+(defrule resource-locks-lock-rejected-release-acquired-resources
+  "A lock was rejected, therefore release all acquired resources."
   ?m <- (mutex (name ?res)
                (request LOCK)
-               (response REJECTED|ERROR)
+               (response REJECTED)
                (error-msg ?err))
   ?g <- (goal (mode COMMITTED)
               (required-resources $?req)
               (acquired-resources $?acq&:(member$ ?res (set-diff ?req ?acq))))
+  ; We cannot abort a pending request. Thus, we first need to wait to get
+  ; responses for all requested locks.
+  (not (mutex (name ?res&:(member$ ?req)) (response PENDING)))
+  =>
+  (do-for-all-facts ((?om mutex)) (member$ ?om:name ?acq)
+    (mutex-unlock-async ?om:name)
+  )
+)
+
+(defrule resource-locks-reject-goal-on-rejected-lock
+  "A lock was rejected and no resource is acquired anymore. Reject the goal."
+  (mutex (name ?res) (request LOCK) (response REJECTED) (error-msg ?err))
+  ?g <- (goal (mode COMMITTED)
+              (required-resources $?req&:(member$ res ?req))
+              (acquired-resources))
+  ; We cannot abort a pending request. Thus, we first need to wait to get
+  ; responses for all requested locks.
+  (not (mutex (name ?res&:(member$ ?req)) (response PENDING)))
   =>
   (modify ?g (mode FINISHED) (outcome REJECTED) (message ?err))
-  (modify ?m (request NONE) (response NONE) (error-msg ""))
+  (do-for-all-facts
+    ((?om mutex))
+    (and (eq ?m:response REJECTED) (member$ ?om:name ?req))
+    (modify ?om (request NONE) (response NONE) (error-msg ""))
+  )
 )
 
 (defrule resource-locks-unlock-start
@@ -69,8 +91,7 @@
 
 (defrule resource-locks-unlock-done
   ?m <- (mutex (name ?res) (request UNLOCK) (response UNLOCKED))
-  ?g <- (goal (mode RETRACTED)
-              (acquired-resources $?acq&:(member$ ?res ?acq)))
+  ?g <- (goal (acquired-resources $?acq&:(member$ ?res ?acq)))
   =>
   (modify ?g (acquired-resources (delete-member$ ?acq ?res)))
   (modify ?m (request NONE) (response NONE))

- *commit* 92a9402576537140a8a8bb4d2266bdaaf7cd5001 - - - - - - - - - -
Author:  Till Hofmann <hofm...@kbsg.rwth-aachen.de>
Date:    Fri Jun 1 19:38:06 2018 +0200
Subject: clips-executive: prepend all resource locks with resource-

 .../clips-executive/clips/resource-locks.clp       |   55 ++++++++++++++------
 1 files changed, 39 insertions(+), 16 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-executive/clips/resource-locks.clp 
b/src/plugins/clips-executive/clips/resource-locks.clp
index b541001..becc95a 100644
--- a/src/plugins/clips-executive/clips/resource-locks.clp
+++ b/src/plugins/clips-executive/clips/resource-locks.clp
@@ -19,15 +19,30 @@
 ; Read the full text in the LICENSE.GPL file in the doc directory.
 ;
 
+(deffunction resource-to-mutex (?resource)
+  "Get the name of the mutex for the given resource."
+  (return (sym-cat resource- ?resource))
+)
+
+(deffunction mutex-to-resource (?mutex)
+  "Get the resource name of a resource mutex."
+  (if (str-prefix resource- ?mutex)  then
+    (return
+      (sym-cat (sub-string (+ (length$ resource-) 1) (length$ ?mutex) ?mutex)))
+  )
+  (return FALSE)
+)
+
 (defrule resource-locks-request-lock
   (goal (mode COMMITTED)
         (acquired-resources $?acq)
-        (required-resources $?req)
-  (not (mutex (name ?n&:(member$ ?n ?req)) (request ~NONE)))
+        (required-resources $?req))
+  (not (mutex (name ?n&:(member$ (mutex-to-resource ?n) ?req))
+              (request ~NONE)))
   =>
   (foreach ?res (set-diff ?req ?acq)
-    (printout warn "Trying to lock " ?res crlf)
-    (mutex-try-lock-async ?res)
+    (printout warn "Locking resource " ?res crlf)
+    (mutex-try-lock-async (resource-to-mutex ?res))
   )
 )
 
@@ -35,9 +50,10 @@
   ?m <- (mutex (name ?res) (request LOCK) (response ACQUIRED))
   ?g <- (goal (mode COMMITTED)
               (required-resources $?req)
-              (acquired-resources $?acq&:(member$ ?res (set-diff ?req ?acq))))
+              (acquired-resources $?acq
+                &:(member$ (mutex-to-resource ?res) (set-diff ?req ?acq))))
   =>
-  (modify ?g (acquired-resources (append$ ?acq ?res)))
+  (modify ?g (acquired-resources (append$ ?acq (mutex-to-resource ?res))))
   (modify ?m (request NONE) (response NONE))
 )
 
@@ -50,12 +66,14 @@
                (error-msg ?err))
   ?g <- (goal (mode COMMITTED)
               (required-resources $?req)
-              (acquired-resources $?acq&:(member$ ?res (set-diff ?req ?acq))))
+              (acquired-resources $?acq
+                &:(member$ (mutex-to-resource ?res) (set-diff ?req ?acq))))
   ; We cannot abort a pending request. Thus, we first need to wait to get
   ; responses for all requested locks.
-  (not (mutex (name ?res&:(member$ ?req)) (response PENDING)))
+  (not (mutex (name ?on&:(member$ (mutex-to-resource ?on) ?req))
+              (response PENDING)))
   =>
-  (do-for-all-facts ((?om mutex)) (member$ ?om:name ?acq)
+  (do-for-all-facts ((?om mutex)) (member$ (mutex-to-resource ?om:name) ?acq)
     (mutex-unlock-async ?om:name)
   )
 )
@@ -64,16 +82,19 @@
   "A lock was rejected and no resource is acquired anymore. Reject the goal."
   (mutex (name ?res) (request LOCK) (response REJECTED) (error-msg ?err))
   ?g <- (goal (mode COMMITTED)
-              (required-resources $?req&:(member$ res ?req))
+              (required-resources $?req
+                &:(member$ (mutex-to-resource ?res) ?req))
               (acquired-resources))
   ; We cannot abort a pending request. Thus, we first need to wait to get
   ; responses for all requested locks.
-  (not (mutex (name ?res&:(member$ ?req)) (response PENDING)))
+  (not (mutex (name ?res&:(member$ (mutex-to-resource ?res) ?req))
+              (response PENDING)))
   =>
   (modify ?g (mode FINISHED) (outcome REJECTED) (message ?err))
   (do-for-all-facts
     ((?om mutex))
-    (and (eq ?m:response REJECTED) (member$ ?om:name ?req))
+    (and (eq ?om:response ERROR)
+         (member$ (mutex-to-resource ?om:name) ?req))
     (modify ?om (request NONE) (response NONE) (error-msg ""))
   )
 )
@@ -83,16 +104,18 @@
   =>
   (foreach ?res ?acq
     (if (not (any-factp ((?m mutex)) (neq ?m:request NONE))) then
-      (printout warn "Trying to unlock " ?res crlf)
-      (mutex-unlock-async ?res)
+      (printout warn "Unlocking resource " ?res crlf)
+      (mutex-unlock-async (resource-to-mutex ?res))
     )
   )
 )
 
 (defrule resource-locks-unlock-done
   ?m <- (mutex (name ?res) (request UNLOCK) (response UNLOCKED))
-  ?g <- (goal (acquired-resources $?acq&:(member$ ?res ?acq)))
+  ?g <- (goal (acquired-resources $?acq
+                &:(member$ (mutex-to-resource ?res) ?acq)))
   =>
-  (modify ?g (acquired-resources (delete-member$ ?acq ?res)))
+  (modify ?g (acquired-resources
+              (delete-member$ ?acq (mutex-to-resource ?res))))
   (modify ?m (request NONE) (response NONE))
 )

- *commit* 1e6f98fd5620d17edaa6ea01174301048a874380 - - - - - - - - - -
Author:  Till Hofmann <hofm...@kbsg.rwth-aachen.de>
Date:    Fri Jun 1 19:39:05 2018 +0200
Subject: clips-executive: treat errors during resource locking as rejections

 .../clips-executive/clips/resource-locks.clp       |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-executive/clips/resource-locks.clp 
b/src/plugins/clips-executive/clips/resource-locks.clp
index becc95a..2de5c3c 100644
--- a/src/plugins/clips-executive/clips/resource-locks.clp
+++ b/src/plugins/clips-executive/clips/resource-locks.clp
@@ -57,12 +57,11 @@
   (modify ?m (request NONE) (response NONE))
 )
 
-; TODO: deal with mutex errors (response ERROR)
 (defrule resource-locks-lock-rejected-release-acquired-resources
   "A lock was rejected, therefore release all acquired resources."
   ?m <- (mutex (name ?res)
                (request LOCK)
-               (response REJECTED)
+               (response REJECTED|ERROR)
                (error-msg ?err))
   ?g <- (goal (mode COMMITTED)
               (required-resources $?req)
@@ -80,7 +79,7 @@
 
 (defrule resource-locks-reject-goal-on-rejected-lock
   "A lock was rejected and no resource is acquired anymore. Reject the goal."
-  (mutex (name ?res) (request LOCK) (response REJECTED) (error-msg ?err))
+  (mutex (name ?res) (request LOCK) (response REJECTED|ERROR) (error-msg ?err))
   ?g <- (goal (mode COMMITTED)
               (required-resources $?req
                 &:(member$ (mutex-to-resource ?res) ?req))
@@ -93,7 +92,7 @@
   (modify ?g (mode FINISHED) (outcome REJECTED) (message ?err))
   (do-for-all-facts
     ((?om mutex))
-    (and (eq ?om:response ERROR)
+    (and (member$ ?om:response (create$ REJECTED ERROR))
          (member$ (mutex-to-resource ?om:name) ?req))
     (modify ?om (request NONE) (response NONE) (error-msg ""))
   )




-- 
Fawkes Robotics Framework                 http://www.fawkesrobotics.org
_______________________________________________
fawkes-commits mailing list
fawkes-commits@lists.kbsg.rwth-aachen.de
https://lists.kbsg.rwth-aachen.de/listinfo/fawkes-commits

Reply via email to