From 3faaa1c5805d0025326dc5cc97e16f823bb30d1a Mon Sep 17 00:00:00 2001 From: Sam Caldwell Date: Fri, 24 May 2019 15:07:34 -0400 Subject: [PATCH] typed flink working! --- racket/typed/examples/roles/flink.rkt | 18 ++++++---- racket/typed/examples/roles/lorem.txt | 48 +++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 racket/typed/examples/roles/lorem.txt diff --git a/racket/typed/examples/roles/flink.rkt b/racket/typed/examples/roles/flink.rkt index c6d016b..ef7cd8e 100644 --- a/racket/typed/examples/roles/flink.rkt +++ b/racket/typed/examples/roles/flink.rkt @@ -210,11 +210,11 @@ The JobManager then performs the job and, when finished, asserts (job-finished I (during (job-manager-alive) (log "TM learns about JM") (define/query-set task-runners (task-runner $id _) id - #;#:on-add #;(log "TM learns about task-runner ~a" id)) + #:on-add (log "TM learns about task-runner ~a" id)) ;; I wonder just how inefficient this is (define/query-set idle-runners (task-runner $id IDLE) id - #;#:on-add #;(log "TM learns that task-runner ~a is IDLE" id) - #;#:on-remove #;(log "TM learns that task-runner ~a is NOT IDLE" id)) + #:on-add (log "TM learns that task-runner ~a is IDLE" id) + #:on-remove (log "TM learns that task-runner ~a is NOT IDLE" id)) (assert (task-manager id (set-count (ref idle-runners)))) (field [busy-runners (List ID) (list)]) (define (can-accept?) @@ -312,14 +312,16 @@ The JobManager then performs the job and, when finished, asserts (job-finished I ;; keep track of task managers, how many slots they say are open, and how many tasks we have assigned. (define/query-hash task-managers (task-manager $id $slots) id slots - #;#:on-add #;(log "JM learns that ~a has ~v slots" id slots)) + #:on-add (log "JM learns that ~a has ~v slots" id (hash-ref (ref task-managers) id))) ;; (Hashof TaskManagerID Nat) ;; to better understand the supply of slots for each task manager, keep track of the number ;; of requested tasks that we have yet to hear back about (field [requests-in-flight (Hash ID Int) (hash)]) (define (slots-available) + #;(printf "slots available!\n") (for/sum ([(id v) (ref task-managers)]) + #;(printf "(slots-available) ~a :: ~a\n" id v) (max 0 (- v (hash-ref/failure (ref requests-in-flight) id 0))))) ;; ID -> Void @@ -441,13 +443,14 @@ The JobManager then performs the job and, when finished, asserts (job-finished I (define slots (slots-available)) (define-tuple (ts readys) (split-at/lenient (ref ready-tasks) slots)) + #;(printf "slots: ~a\n" slots) + #;(printf "ts: ~a\n" ts) + #;(printf "readys: ~a\n" readys) (for ([t ts]) (perform-task t push-results)) (unless (empty? ts) ;; the empty? check may be necessary to avoid a dataflow loop - (set! ready-tasks readys))) - - #f)))) + (set! ready-tasks readys))))))) ;; --------------------------------------------------------------------------------------------------- ;; Client @@ -477,4 +480,5 @@ The JobManager then performs the job and, when finished, asserts (job-finished I (spawn-task-manager) (spawn-task-runner) (spawn-task-runner) + (spawn-client (file->job "lorem.txt")) (spawn-client (string->job INPUT))) diff --git a/racket/typed/examples/roles/lorem.txt b/racket/typed/examples/roles/lorem.txt new file mode 100644 index 0000000..a424d0a --- /dev/null +++ b/racket/typed/examples/roles/lorem.txt @@ -0,0 +1,48 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vehicula +accumsan tristique. Integer sit amet sem metus. Nam porta tempus nisl ac +ullamcorper. Nulla interdum ante ut odio ultricies lobortis. Nam sollicitudin +lorem quis pellentesque consequat. Aenean pulvinar diam sed nulla semper, eget +varius tortor faucibus. Nam sodales mattis elit, ac convallis sem pretium sed. +Aliquam nibh velit, facilisis sit amet aliquam quis, dapibus vel mauris. Cras +pharetra arcu tortor, id pharetra massa aliquet non. Maecenas elit libero, +malesuada nec enim ut, ornare sagittis lectus. Praesent bibendum sed magna id +euismod. Maecenas vulputate nunc mauris, a dignissim magna volutpat consectetur. +Fusce malesuada neque sapien, sit amet ultricies urna finibus non. Fusce +ultrices ipsum vel ligula eleifend, eget eleifend magna interdum. Curabitur +semper quam nunc, sed laoreet ipsum facilisis at. Etiam ut quam ac eros +ullamcorper mattis eget vel leo. + +Integer ac ipsum augue. Ut molestie ac mi vel varius. Praesent at est et nulla +facilisis viverra sit amet eu augue. Nullam diam odio, elementum vehicula +convallis id, hendrerit non magna. Suspendisse porta faucibus feugiat. In +rhoncus semper diam eu malesuada. Suspendisse ligula metus, rhoncus eget nunc +et, cursus rutrum sem. Fusce iaculis commodo magna, vitae viverra arcu. Fusce et +eros et massa sollicitudin bibendum. Etiam convallis, nibh accumsan porttitor +sollicitudin, mauris orci consectetur nisl, sit amet venenatis nulla enim eget +risus. Phasellus quam diam, commodo in sodales eget, scelerisque sed odio. Sed +aliquam massa vel efficitur volutpat. Mauris ut elit dictum, euismod turpis in, +feugiat lectus. + +Vestibulum leo est, feugiat sit amet metus nec, ullamcorper commodo purus. Sed +non mauris non tellus ullamcorper congue interdum et mauris. Donec sit amet +mauris urna. Sed in enim nisi. Praesent accumsan sagittis euismod. Donec vel +nisl turpis. Ut non efficitur erat. Vestibulum quis fermentum elit. Mauris +molestie nibh posuere fringilla rutrum. Praesent mattis tortor sapien, semper +varius elit ultrices in. + +Etiam non leo lacus. Cras id tincidunt ante. Donec mattis urna fermentum ex +elementum blandit. Sed ornare vestibulum nulla luctus malesuada. Maecenas +pulvinar metus tortor. Sed dapibus enim vel sem bibendum, sit amet tincidunt +ligula varius. Nullam vitae augue at dui blandit cursus. Suspendisse faucibus +posuere luctus. + +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos +himenaeos. Aenean suscipit diam eu luctus auctor. Donec non magna quis ex +tincidunt condimentum. Ut porta maximus quam, non varius sem mattis eu. Fusce +sit amet vestibulum libero. Aliquam vestibulum sagittis mi a pellentesque. Cras +maximus cursus libero vitae porttitor. Aenean fermentum erat eget turpis mattis, +quis commodo magna pharetra. Praesent eu hendrerit arcu. Proin mollis, sem ac +accumsan dignissim, velit risus ultricies mauris, eu imperdiet dolor ipsum at +augue. Fusce bibendum, tortor eget pulvinar auctor, leo mi volutpat urna, nec +convallis sem quam non tellus. Vestibulum fermentum sodales faucibus. Nunc quis +feugiat quam. Donec pulvinar feugiat mauris non porttitor.