flor 0.16.1 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/CREDITS.md +1 -0
  4. data/Makefile +1 -1
  5. data/README.md +82 -6
  6. data/lib/flor.rb +1 -1
  7. data/lib/flor/conf.rb +19 -6
  8. data/lib/flor/core/executor.rb +45 -16
  9. data/lib/flor/core/node.rb +4 -4
  10. data/lib/flor/core/procedure.rb +40 -0
  11. data/lib/flor/djan.rb +5 -2
  12. data/lib/flor/flor.rb +92 -7
  13. data/lib/flor/id.rb +19 -0
  14. data/lib/flor/migrations/0001_tables.rb +6 -6
  15. data/lib/flor/migrations/0005_pointer_content.rb +20 -0
  16. data/lib/flor/pcore/_apply.rb +103 -57
  17. data/lib/flor/pcore/_att.rb +15 -1
  18. data/lib/flor/pcore/_ref.rb +2 -1
  19. data/lib/flor/pcore/arith.rb +46 -9
  20. data/lib/flor/pcore/break.rb +1 -1
  21. data/lib/flor/pcore/case.rb +41 -0
  22. data/lib/flor/pcore/collect.rb +1 -1
  23. data/lib/flor/pcore/cursor.rb +1 -1
  24. data/lib/flor/pcore/define.rb +32 -6
  25. data/lib/flor/pcore/iterator.rb +12 -0
  26. data/lib/flor/pcore/on_cancel.rb +1 -1
  27. data/lib/flor/pcore/set.rb +14 -4
  28. data/lib/flor/punit/{ccollect.rb → c_collect.rb} +2 -2
  29. data/lib/flor/punit/c_each.rb +11 -0
  30. data/lib/flor/punit/c_for_each.rb +41 -0
  31. data/lib/flor/punit/c_iterator.rb +160 -0
  32. data/lib/flor/punit/c_map.rb +43 -0
  33. data/lib/flor/punit/concurrence.rb +43 -200
  34. data/lib/flor/punit/graft.rb +3 -2
  35. data/lib/flor/punit/m_ram.rb +281 -0
  36. data/lib/flor/unit.rb +1 -0
  37. data/lib/flor/unit/caller.rb +6 -1
  38. data/lib/flor/unit/executor.rb +17 -4
  39. data/lib/flor/unit/ganger.rb +12 -1
  40. data/lib/flor/unit/hloader.rb +251 -0
  41. data/lib/flor/unit/hook.rb +74 -15
  42. data/lib/flor/unit/hooker.rb +9 -12
  43. data/lib/flor/unit/loader.rb +41 -17
  44. data/lib/flor/unit/models.rb +54 -18
  45. data/lib/flor/unit/models/execution.rb +15 -4
  46. data/lib/flor/unit/models/pointer.rb +11 -0
  47. data/lib/flor/unit/scheduler.rb +126 -30
  48. data/lib/flor/unit/spooler.rb +5 -3
  49. data/lib/flor/unit/storage.rb +40 -13
  50. data/lib/flor/unit/waiter.rb +165 -26
  51. data/lib/flor/unit/wlist.rb +98 -5
  52. metadata +10 -4
  53. data/lib/flor/punit/cmap.rb +0 -112
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1
4
+ version: 0.16.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-05 00:00:00.000000000 Z
11
+ date: 2019-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: munemo
@@ -162,6 +162,7 @@ files:
162
162
  - lib/flor/migrations/0002_cunit_and_munit.rb
163
163
  - lib/flor/migrations/0003_timer_onid_bnid.rb
164
164
  - lib/flor/migrations/0004_trap_bnid.rb
165
+ - lib/flor/migrations/0005_pointer_content.rb
165
166
  - lib/flor/parser.rb
166
167
  - lib/flor/pcore/_apply.rb
167
168
  - lib/flor/pcore/_arr.rb
@@ -248,14 +249,18 @@ files:
248
249
  - lib/flor/pcore/twig.rb
249
250
  - lib/flor/pcore/type_of.rb
250
251
  - lib/flor/pcore/until.rb
252
+ - lib/flor/punit/c_collect.rb
253
+ - lib/flor/punit/c_each.rb
254
+ - lib/flor/punit/c_for_each.rb
255
+ - lib/flor/punit/c_iterator.rb
256
+ - lib/flor/punit/c_map.rb
251
257
  - lib/flor/punit/cancel.rb
252
- - lib/flor/punit/ccollect.rb
253
- - lib/flor/punit/cmap.rb
254
258
  - lib/flor/punit/concurrence.rb
255
259
  - lib/flor/punit/cron.rb
256
260
  - lib/flor/punit/do_trap.rb
257
261
  - lib/flor/punit/every.rb
258
262
  - lib/flor/punit/graft.rb
263
+ - lib/flor/punit/m_ram.rb
259
264
  - lib/flor/punit/on_timeout.rb
260
265
  - lib/flor/punit/part.rb
261
266
  - lib/flor/punit/schedule.rb
@@ -272,6 +277,7 @@ files:
272
277
  - lib/flor/unit/caller.rb
273
278
  - lib/flor/unit/executor.rb
274
279
  - lib/flor/unit/ganger.rb
280
+ - lib/flor/unit/hloader.rb
275
281
  - lib/flor/unit/hook.rb
276
282
  - lib/flor/unit/hooker.rb
277
283
  - lib/flor/unit/journal.rb
@@ -1,112 +0,0 @@
1
-
2
- class Flor::Pro::Cmap < Flor::Procedure
3
- #
4
- # Concurrent version of "map". Spins a concurrent child for each
5
- # element of the incoming/argument collection.
6
- #
7
- # ```
8
- # cmap [ 1 2 3 ]
9
- # def x \ * x 2
10
- # # yields: [ 2, 4, 6 ]
11
- #
12
- # [ 1 2 3 ]
13
- # cmap (def x \ * x 2)
14
- # # yields: [ 2, 4, 6 ]
15
- #
16
- # define double x \ * x 2
17
- # cmap double [ 1 2 3 ]
18
- # # yields: [ 2, 4, 6 ]
19
- # ```
20
- #
21
- # "cmap" is over when all the children have answered. For more complex
22
- # concurrent behaviours, look at [concurrence](concurrence.md).
23
- #
24
- # ## see also
25
- #
26
- # Map, concurrence.
27
-
28
- name 'cmap'
29
-
30
- def pre_execute
31
-
32
- @node['args'] = []
33
- @node['result'] = nil
34
-
35
- unatt_unkeyed_children
36
- end
37
-
38
- def receive_non_att
39
-
40
- if @node['result']
41
- receive_ret
42
- else
43
- @node['args'] << payload['ret']
44
- super
45
- end
46
- end
47
-
48
- def receive_last
49
-
50
- if @node['result']
51
- super
52
- else
53
- receive_last_argument
54
- end
55
- end
56
-
57
- protected
58
-
59
- def receive_last_argument
60
-
61
- col = nil
62
- fun = nil
63
- @node['args'].each do |a|
64
- if Flor.is_func_tree?(a)
65
- fun = a
66
- elsif Flor.is_collection?(a)
67
- col = a
68
- end
69
- end
70
- col ||= node_payload_ret
71
-
72
- fail Flor::FlorError.new("collection not given to #{heap.inspect}", self) \
73
- unless Flor.is_collection?(col)
74
- return wrap('ret' => col) \
75
- unless Flor.is_func_tree?(fun)
76
-
77
- @node['cnt'] = col.size
78
- @node['result'] = []
79
-
80
- col
81
- .collect
82
- .with_index { |e, i|
83
- apply(fun, determine_iteration_args(col, i), tree[2]) }
84
- .flatten(1)
85
- end
86
-
87
- def determine_iteration_args(col, idx)
88
-
89
- args =
90
- if col.is_a?(Array)
91
- [ [ 'elt', col[idx] ] ]
92
- else
93
- e = col.to_a[idx]
94
- [ [ 'key', e[0] ], [ 'val', e[1] ] ]
95
- end
96
- args << [ 'idx', idx ]
97
- args << [ 'len', col.length ]
98
-
99
- args
100
- end
101
-
102
- def receive_ret
103
-
104
- @node['result'] << [ from_sub_nid, payload['ret'] ]
105
- @node['cnt'] = @node['cnt'] - 1
106
-
107
- return [] if @node['cnt'] > 0 # still waiting for answers
108
-
109
- wrap('ret' => @node['result'].sort_by(&:first).collect(&:last)) # over
110
- end
111
- end
112
-