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