flor 1.1.1 → 1.3.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/lib/flor.rb +1 -1
- data/lib/flor/core/procedure.rb +8 -4
- data/lib/flor/log.rb +1 -1
- data/lib/flor/unit/models/pointer.rb +20 -1
- data/lib/flor/unit/scheduler.rb +9 -7
- data/lib/flor/unit/storage.rb +60 -29
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d69af5b3896b5a00daa44d3fc0c60e08d9ee893916e5aeff81869cc35b2967e
|
4
|
+
data.tar.gz: 6a780ea13692c00c23826462de49ad87f32e036103200d530fd247b4208fb682
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a39bbe96e2d6f5d48502c3c364b3fab6411098ab569aa3fec5ec8a3ae47e0c15bec321c312b6b70c9ef9f2cf49e5feced6e672fa3dbb0edd5f2772fea7007138
|
7
|
+
data.tar.gz: c46e23499dffdf92acd34ac2961b91d3cbeeafdd98b40e30fdb0de8110293eecc8fc0fa1e5e0cb842a769f4e9b85ecebb032b6686b2e547d716aeca2b6862d37
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,32 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## flor 1.3.1 released 2021-04-19
|
6
|
+
|
7
|
+
* Fix flor_pointers var deletion mechanism (type = ' var ')
|
8
|
+
|
9
|
+
|
10
|
+
## flor 1.3.0 released 2021-04-13
|
11
|
+
|
12
|
+
* Insert a row flor_pointers for 'failure'
|
13
|
+
|
14
|
+
|
15
|
+
## flor 1.2.2 released 2021-03-29
|
16
|
+
|
17
|
+
* Include data in flor_pointers
|
18
|
+
* Ensure flor_pointers name is a string
|
19
|
+
|
20
|
+
|
21
|
+
## flor 1.2.1 released 2021-03-22
|
22
|
+
|
23
|
+
* If conf sto_db_logger is false, do not attach a logger to the db connection
|
24
|
+
|
25
|
+
|
26
|
+
## flor 1.2.0 released 2021-03-15
|
27
|
+
|
28
|
+
* Add #attd, #attl, #att_texts to Flor::Pointer
|
29
|
+
|
30
|
+
|
5
31
|
## flor 1.1.1 released 2021-03-03
|
6
32
|
|
7
33
|
* Use YAML to have more compact msg_to_detail_s
|
data/lib/flor.rb
CHANGED
data/lib/flor/core/procedure.rb
CHANGED
@@ -5,7 +5,7 @@ class Flor::Procedure < Flor::Node
|
|
5
5
|
# "Returning vars" variables to pass back to pass upon reply.
|
6
6
|
# In the 'receive' messages, it's a hash under the key 'rvars'.
|
7
7
|
#
|
8
|
-
RVARS = %w[ idx ]
|
8
|
+
RVARS = %w[ idx ].freeze
|
9
9
|
|
10
10
|
# Attributes that when given alone are turned to "true" attributes.
|
11
11
|
#
|
@@ -13,7 +13,7 @@ class Flor::Procedure < Flor::Node
|
|
13
13
|
#
|
14
14
|
# The transformation occurs in Flor::Pro::Att ("_att").
|
15
15
|
#
|
16
|
-
TRUE_ATTS = %w[ flank off disabled ]
|
16
|
+
TRUE_ATTS = %w[ flank off disabled ].freeze
|
17
17
|
|
18
18
|
class << self
|
19
19
|
|
@@ -550,6 +550,8 @@ class Flor::Procedure < Flor::Node
|
|
550
550
|
wrap_reply
|
551
551
|
end
|
552
552
|
|
553
|
+
IF_UNLESS = %w[ _if _unless ].freeze
|
554
|
+
|
553
555
|
# Grab on_error proc from incoming payload and stores it into parent node.
|
554
556
|
#
|
555
557
|
# Has no effect if there is no parent node.
|
@@ -562,7 +564,7 @@ class Flor::Procedure < Flor::Node
|
|
562
564
|
@node; loop do
|
563
565
|
pnode = parent_node(pnode)
|
564
566
|
return unless pnode
|
565
|
-
break unless
|
567
|
+
break unless IF_UNLESS.include?(pnode['heap'])
|
566
568
|
end
|
567
569
|
|
568
570
|
flavour = "on_#{key}"
|
@@ -598,6 +600,8 @@ class Flor::Procedure < Flor::Node
|
|
598
600
|
wrap('point' => 'entered', 'nid' => nid, 'tags' => ret)
|
599
601
|
end
|
600
602
|
|
603
|
+
WRAP_KEYS = %w[ error cancel timeout ].freeze
|
604
|
+
|
601
605
|
def wrap(h={})
|
602
606
|
|
603
607
|
m = {}
|
@@ -642,7 +646,7 @@ class Flor::Procedure < Flor::Node
|
|
642
646
|
# was considering passing the whole vars back (as 'varz'), but
|
643
647
|
# it got in the way... and it might be heavy
|
644
648
|
|
645
|
-
|
649
|
+
WRAP_KEYS
|
646
650
|
.each { |k|
|
647
651
|
co = @node["child_on_#{k}"]
|
648
652
|
next unless co
|
data/lib/flor/log.rb
CHANGED
@@ -343,7 +343,7 @@ module Flor
|
|
343
343
|
o.puts(tree_to_s(node.lookup_tree(nid), nid, out: o)) if node
|
344
344
|
|
345
345
|
o.puts "#{_c.dg}node:#{_c.yl}"
|
346
|
-
o.puts YAML.dump(n.merge('tree' => '(above)'))
|
346
|
+
o.puts n ? YAML.dump(n.merge('tree' => '(above)')) : 'nil'
|
347
347
|
|
348
348
|
o.puts "#{_c.dg}nodes:#{_c.yl}"
|
349
349
|
o.puts nods_to_s(executor, m, opts)
|
@@ -30,7 +30,7 @@ module Flor
|
|
30
30
|
#end
|
31
31
|
|
32
32
|
# If the pointer is a "var" pointer, returns the full value
|
33
|
-
# for the variable, as
|
33
|
+
# for the variable, as found in the execution's node "0".
|
34
34
|
#
|
35
35
|
def full_value
|
36
36
|
|
@@ -38,6 +38,25 @@ module Flor
|
|
38
38
|
|
39
39
|
node['vars'][name]
|
40
40
|
end
|
41
|
+
|
42
|
+
def attd
|
43
|
+
|
44
|
+
data['atts'].inject({}) { |h, (k, v)| h[k] = v if k; h }
|
45
|
+
|
46
|
+
rescue; []
|
47
|
+
end
|
48
|
+
|
49
|
+
def attl
|
50
|
+
|
51
|
+
data['atts'].inject([]) { |a, (k, v)| a << v if k == nil; a }
|
52
|
+
|
53
|
+
rescue; []
|
54
|
+
end
|
55
|
+
|
56
|
+
def att_texts
|
57
|
+
|
58
|
+
attl.select { |e| e.is_a?(String) }
|
59
|
+
end
|
41
60
|
end
|
42
61
|
end
|
43
62
|
|
data/lib/flor/unit/scheduler.rb
CHANGED
@@ -242,18 +242,18 @@ module Flor
|
|
242
242
|
end
|
243
243
|
end
|
244
244
|
|
245
|
+
RETURN_KEYS = %w[ exid nid payload tasker cause ].freeze
|
246
|
+
|
245
247
|
def return(message)
|
246
248
|
|
247
|
-
|
249
|
+
queue(
|
248
250
|
if message['point'] == 'failed'
|
249
251
|
message
|
250
252
|
else
|
251
253
|
message
|
252
|
-
.select { |k, _|
|
254
|
+
.select { |k, _| RETURN_KEYS.include?(k) }
|
253
255
|
.merge!('point' => 'return')
|
254
|
-
end
|
255
|
-
|
256
|
-
queue(m)
|
256
|
+
end)
|
257
257
|
|
258
258
|
nil
|
259
259
|
end
|
@@ -432,7 +432,7 @@ module Flor
|
|
432
432
|
ex ? ex.execution : nil
|
433
433
|
end
|
434
434
|
|
435
|
-
DUMP_KEYS = %w[ timestamp executions timers traps pointers ]
|
435
|
+
DUMP_KEYS = %w[ timestamp executions timers traps pointers ].freeze
|
436
436
|
|
437
437
|
# Dumps all or some of the executions to a JSON string.
|
438
438
|
# See Scheduler#load for importing.
|
@@ -598,6 +598,8 @@ module Flor
|
|
598
598
|
puts(on_start_exc(ex))
|
599
599
|
end
|
600
600
|
|
601
|
+
PREP_KEYS = %w[ exid name nid payload on_receive_last ].freeze
|
602
|
+
|
601
603
|
def prepare_message(point, args)
|
602
604
|
|
603
605
|
h = args
|
@@ -612,7 +614,7 @@ module Flor
|
|
612
614
|
opts = {}
|
613
615
|
|
614
616
|
h.each do |k, v|
|
615
|
-
if
|
617
|
+
if PREP_KEYS.include?(k)
|
616
618
|
msg[k] = v
|
617
619
|
else
|
618
620
|
opts[k.to_sym] = v
|
data/lib/flor/unit/storage.rb
CHANGED
@@ -12,8 +12,9 @@ module Flor
|
|
12
12
|
:status, :ctime, :mtime, :cunit, :munit
|
13
13
|
].freeze
|
14
14
|
POINTER_COLUMNS = [
|
15
|
-
:domain, :exid, :nid, :type, :name, :value, :ctime, :cunit
|
16
|
-
|
15
|
+
:domain, :exid, :nid, :type, :name, :value, :ctime, :cunit,
|
16
|
+
:content
|
17
|
+
].freeze
|
17
18
|
|
18
19
|
attr_reader :unit, :db, :models
|
19
20
|
|
@@ -219,6 +220,9 @@ module Flor
|
|
219
220
|
raise err
|
220
221
|
end
|
221
222
|
|
223
|
+
CRECON_STATUSES = %w[ created consumed ].freeze
|
224
|
+
RESCON_STATUSES = %w[ reserved consumed ].freeze
|
225
|
+
|
222
226
|
def load_messages(exe_count)
|
223
227
|
|
224
228
|
exe_count += 2
|
@@ -229,12 +233,12 @@ module Flor
|
|
229
233
|
_exids_being_processed =
|
230
234
|
@db[:flor_messages]
|
231
235
|
.select(:exid)
|
232
|
-
.exclude(status:
|
236
|
+
.exclude(status: CRECON_STATUSES)
|
233
237
|
_exids =
|
234
238
|
@db[:flor_messages]
|
235
239
|
.select(:exid)
|
236
240
|
.exclude(exid: _exids_being_processed)
|
237
|
-
.exclude(status:
|
241
|
+
.exclude(status: RESCON_STATUSES)
|
238
242
|
.limit(exe_count)
|
239
243
|
@db[:flor_messages]
|
240
244
|
.where(exid: _exids, status: 'created')
|
@@ -317,7 +321,7 @@ module Flor
|
|
317
321
|
[]
|
318
322
|
end
|
319
323
|
|
320
|
-
POINTS_TO_ARCHIVE = %w[ terminated failed ceased ]
|
324
|
+
POINTS_TO_ARCHIVE = %w[ terminated failed ceased ].freeze
|
321
325
|
|
322
326
|
def consume(messages)
|
323
327
|
|
@@ -685,6 +689,8 @@ module Flor
|
|
685
689
|
# done in update_pointers
|
686
690
|
end
|
687
691
|
|
692
|
+
FP_TYPES = %w[ var ].freeze
|
693
|
+
|
688
694
|
def update_pointers(exe, status, now)
|
689
695
|
|
690
696
|
# Q Should we archive old pointers?
|
@@ -700,7 +706,7 @@ module Flor
|
|
700
706
|
|
701
707
|
@db[:flor_pointers]
|
702
708
|
.where(exid: exid)
|
703
|
-
.where(Sequel.|({ type:
|
709
|
+
.where(Sequel.|({ type: FP_TYPES }, Sequel.~(nid: exe['nodes'].keys)))
|
704
710
|
.delete
|
705
711
|
#
|
706
712
|
# Delete all pointer to vars, their value might have changed,
|
@@ -713,28 +719,57 @@ module Flor
|
|
713
719
|
pointers = exe['nodes']
|
714
720
|
.inject([]) { |a, (nid, node)|
|
715
721
|
|
722
|
+
# add a pointer for each tag
|
723
|
+
|
716
724
|
ts = node['tags']
|
717
725
|
ts.each { |t|
|
718
726
|
a << [ dom, exid, nid, 'tag', t, nil, now, u, nil ] } if ts
|
719
727
|
|
728
|
+
# add a pointer for each var (if nid == '0')
|
729
|
+
|
720
730
|
vs = nid == '0' ? node['vars'] : nil
|
721
731
|
vs.each { |k, v|
|
722
732
|
case v; when Numeric, String, TrueClass, FalseClass, NilClass
|
723
|
-
a << [ dom, exid, '0', 'var', k, v.to_s, now, u,
|
733
|
+
a << [ dom, exid, '0', 'var', k, v.to_s, now, u, v ]
|
724
734
|
when Array, Hash
|
725
735
|
s = '(array)'; s = '(object)' if v.is_a?(Hash)
|
726
|
-
a << [ dom, exid, '0', 'var', k, s, now, u,
|
736
|
+
a << [ dom, exid, '0', 'var', k, s, now, u, v ]
|
727
737
|
else
|
728
|
-
a << [ dom, exid, '0', 'var', k, nil, now, u,
|
738
|
+
a << [ dom, exid, '0', 'var', k, nil, now, u, v ]
|
729
739
|
end } if vs
|
730
740
|
|
741
|
+
# add a pointer for the task if any
|
742
|
+
|
731
743
|
if ta = node['task']
|
732
744
|
tasker = ta['tasker']
|
733
|
-
|
745
|
+
n = ta['name']; name = n.is_a?(String) ? n : JSON.dump(n)
|
734
746
|
content = { message: node['message'], atts: node['atts'] }
|
735
747
|
a << [ dom, exid, nid, 'tasker', tasker, name, now, u, content ]
|
736
748
|
end
|
737
749
|
|
750
|
+
# add a pointer for the error if any
|
751
|
+
|
752
|
+
if fa = node['failure']
|
753
|
+
|
754
|
+
#puts "-" * 80; pp node; puts "-" * 80
|
755
|
+
a <<
|
756
|
+
if er = fa['error']
|
757
|
+
ni = fa['from'] || nid # not nid /!\
|
758
|
+
nam = "#{er['kla']} l#{er['lin']}"
|
759
|
+
val = er['msg']
|
760
|
+
con = { error: fa, nid: ni }
|
761
|
+
[ dom, exid, ni, 'failure', nam, val, now, u, con ]
|
762
|
+
else
|
763
|
+
nam = fa['tasker'] || 'failure'
|
764
|
+
val = [ fa['attl'] || [], fa['attd'] || {} ]
|
765
|
+
.collect(&:inspect).join(' ')
|
766
|
+
con = { error: fa, nid: nid }
|
767
|
+
[ dom, exid, nid, 'failure', nam, val, now, u, con ]
|
768
|
+
end
|
769
|
+
end
|
770
|
+
|
771
|
+
# done
|
772
|
+
|
738
773
|
a }
|
739
774
|
|
740
775
|
cps = @db[:flor_pointers] # current pointers
|
@@ -746,29 +781,22 @@ module Flor
|
|
746
781
|
#
|
747
782
|
# don't insert when already inserted
|
748
783
|
|
749
|
-
|
750
|
-
pointers.each { |ptr|
|
751
|
-
c = ptr[8]; ptr[8] = to_blob(c) if c }
|
752
|
-
else
|
753
|
-
pointers.each { |ptr|
|
754
|
-
ptr.pop }
|
755
|
-
end
|
784
|
+
pointers.each { |ptr| c = ptr[8]; ptr[8] = to_blob(c) if c }
|
756
785
|
|
757
786
|
@db[:flor_pointers]
|
758
787
|
.import(
|
759
|
-
|
788
|
+
POINTER_COLUMNS,
|
760
789
|
pointers)
|
761
790
|
end
|
762
791
|
|
763
|
-
def pointer_columns
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
end
|
792
|
+
#def pointer_columns
|
793
|
+
# @pointer_columns ||=
|
794
|
+
# if @db[:flor_pointers].columns.include?(:content)
|
795
|
+
# POINTER_COLUMNS + [ :content ]
|
796
|
+
# else
|
797
|
+
# POINTER_COLUMNS
|
798
|
+
# end
|
799
|
+
#end
|
772
800
|
|
773
801
|
def determine_type_and_schedule(message)
|
774
802
|
|
@@ -849,8 +877,11 @@ module Flor
|
|
849
877
|
# NB: -1 means "check at every use"
|
850
878
|
end
|
851
879
|
|
852
|
-
@
|
853
|
-
|
880
|
+
if @unit.conf['sto_db_logger'] != false
|
881
|
+
|
882
|
+
@db_logger = DbLogger.new(@unit)
|
883
|
+
@db.loggers << @db_logger
|
884
|
+
end
|
854
885
|
end
|
855
886
|
|
856
887
|
class << self
|
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: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: munemo
|