opee 0.0.2 → 0.0.3
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.
- data/README.md +10 -8
- data/lib/opee/actor.rb +7 -3
- data/lib/opee/env.rb +5 -0
- data/lib/opee/version.rb +1 -1
- data/test/relay.rb +8 -3
- data/test/tc_opee_actor.rb +7 -7
- data/test/tc_opee_env.rb +44 -3
- metadata +2 -2
data/README.md
CHANGED
@@ -12,15 +12,16 @@ be written to improve performance.
|
|
12
12
|
|
13
13
|
This is no where close to being ready for prime time.
|
14
14
|
|
15
|
-
|
15
|
+
## <a name="release">Release Notes</a>
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
### Release 0.0.3
|
18
|
+
|
19
|
+
- Filled out Env and Actor tests.
|
20
|
+
|
21
|
+
- Fixed ordering problem with method execution.
|
22
|
+
|
23
|
+
|
24
|
+
# Plans and Notes
|
24
25
|
|
25
26
|
- Log
|
26
27
|
- allow forward attribute to be set that forwards messages to another Actor
|
@@ -29,6 +30,7 @@ This is no where close to being ready for prime time.
|
|
29
30
|
- set formatter and stringio and test env methods
|
30
31
|
- test forwarding
|
31
32
|
|
33
|
+
- Env
|
32
34
|
- Actor
|
33
35
|
|
34
36
|
- implement a design pattern for a shared work queue
|
data/lib/opee/actor.rb
CHANGED
@@ -63,21 +63,21 @@ module Opee
|
|
63
63
|
# deep copy and freeze args if not already frozen or primitive types
|
64
64
|
def ask(op, *args)
|
65
65
|
@ask_mutex.synchronize {
|
66
|
-
@queue
|
66
|
+
@queue.insert(0, Act.new(op, args))
|
67
67
|
}
|
68
68
|
@loop.wakeup() if RUNNING == @state
|
69
69
|
end
|
70
70
|
|
71
71
|
def on_idle(op, *args)
|
72
72
|
@idle_mutex.synchronize {
|
73
|
-
@idle
|
73
|
+
@idle.insert(0, Act.new(op, args))
|
74
74
|
}
|
75
75
|
@loop.wakeup() if RUNNING == @state
|
76
76
|
end
|
77
77
|
|
78
78
|
def priority_ask(op, *args)
|
79
79
|
@priority_mutex.synchronize {
|
80
|
-
@priority
|
80
|
+
@priority.insert(0, Act.new(op, args))
|
81
81
|
}
|
82
82
|
@loop.wakeup() if RUNNING == @state
|
83
83
|
end
|
@@ -101,6 +101,10 @@ module Opee
|
|
101
101
|
sleep(max_wait)
|
102
102
|
end
|
103
103
|
|
104
|
+
def wakeup()
|
105
|
+
@loop.wakeup()
|
106
|
+
end
|
107
|
+
|
104
108
|
def start()
|
105
109
|
@state = RUNNING
|
106
110
|
@loop.wakeup()
|
data/lib/opee/env.rb
CHANGED
@@ -18,6 +18,10 @@ module Opee
|
|
18
18
|
@@actors.each { |a| blk.yield(a) }
|
19
19
|
end
|
20
20
|
|
21
|
+
def self.actor_count()
|
22
|
+
@@actors.size
|
23
|
+
end
|
24
|
+
|
21
25
|
def self.shutdown()
|
22
26
|
until @@actors.empty?
|
23
27
|
a = @@actors.pop()
|
@@ -62,6 +66,7 @@ module Opee
|
|
62
66
|
|
63
67
|
def self.wait_finish()
|
64
68
|
@@finish_thread = Thread.current
|
69
|
+
@@actors.each { |a| a.wakeup() }
|
65
70
|
while 0 < queue_count()
|
66
71
|
sleep(0.2) # actors should wake up when queue is empty
|
67
72
|
end
|
data/lib/opee/version.rb
CHANGED
data/test/relay.rb
CHANGED
@@ -3,13 +3,18 @@ require 'opee'
|
|
3
3
|
|
4
4
|
class Relay < ::Opee::Actor
|
5
5
|
attr_reader :last_data
|
6
|
+
attr_reader :buddy
|
6
7
|
|
7
|
-
def initialize(
|
8
|
-
|
9
|
-
@buddy = buddy
|
8
|
+
def initialize(options={})
|
9
|
+
@buddy = nil
|
10
10
|
@last_data = nil
|
11
|
+
super(options)
|
11
12
|
end
|
12
13
|
|
14
|
+
def set_options(options)
|
15
|
+
@buddy = options[:buddy]
|
16
|
+
end
|
17
|
+
|
13
18
|
private
|
14
19
|
|
15
20
|
def relay(data)
|
data/test/tc_opee_actor.rb
CHANGED
@@ -12,7 +12,7 @@ require 'relay'
|
|
12
12
|
class OpeeTest < ::Test::Unit::TestCase
|
13
13
|
|
14
14
|
def test_opee_actor_queue
|
15
|
-
a = ::Relay.new(
|
15
|
+
a = ::Relay.new()
|
16
16
|
assert_equal(0, a.queue_count())
|
17
17
|
a.stop()
|
18
18
|
a.ask(:relay, 5)
|
@@ -23,7 +23,7 @@ class OpeeTest < ::Test::Unit::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_opee_actor_ask
|
26
|
-
a = ::Relay.new(
|
26
|
+
a = ::Relay.new()
|
27
27
|
a.ask(:relay, 7)
|
28
28
|
sleep(0.5) # minimize dependencies for simplest possible test
|
29
29
|
assert_equal(7, a.last_data)
|
@@ -31,7 +31,7 @@ class OpeeTest < ::Test::Unit::TestCase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_opee_actor_method_missing
|
34
|
-
a = ::Relay.new(
|
34
|
+
a = ::Relay.new()
|
35
35
|
a.relay(7)
|
36
36
|
::Opee::Env.wait_close()
|
37
37
|
assert_equal(7, a.last_data)
|
@@ -39,13 +39,13 @@ class OpeeTest < ::Test::Unit::TestCase
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_opee_actor_raise_after_close
|
42
|
-
a = ::Relay.new(
|
42
|
+
a = ::Relay.new()
|
43
43
|
a.close()
|
44
44
|
assert_raise(ThreadError) { a.start() }
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_opee_actor_priority
|
48
|
-
a = ::Relay.new(
|
48
|
+
a = ::Relay.new()
|
49
49
|
a.priority_ask(:relay, 7)
|
50
50
|
::Opee::Env.wait_close()
|
51
51
|
assert_equal(7, a.last_data)
|
@@ -53,7 +53,7 @@ class OpeeTest < ::Test::Unit::TestCase
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_opee_actor_idle
|
56
|
-
a = ::Relay.new(
|
56
|
+
a = ::Relay.new()
|
57
57
|
a.on_idle(:relay, 7)
|
58
58
|
::Opee::Env.wait_close()
|
59
59
|
assert_equal(7, a.last_data)
|
@@ -61,7 +61,7 @@ class OpeeTest < ::Test::Unit::TestCase
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_opee_actor_order
|
64
|
-
a = ::Relay.new(
|
64
|
+
a = ::Relay.new()
|
65
65
|
a.stop()
|
66
66
|
a.on_idle(:relay, 17)
|
67
67
|
a.priority_ask(:relay, 3)
|
data/test/tc_opee_env.rb
CHANGED
@@ -11,12 +11,53 @@ require 'relay'
|
|
11
11
|
|
12
12
|
class OpeeTest < ::Test::Unit::TestCase
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
a.
|
14
|
+
def test_opee_env_add_remove
|
15
|
+
assert_equal(0, ::Opee::Env.actor_count)
|
16
|
+
a = ::Relay.new()
|
17
|
+
assert_equal(1, ::Opee::Env.actor_count)
|
18
|
+
a.close()
|
19
|
+
assert_equal(0, ::Opee::Env.actor_count)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_opee_env_each_actor
|
23
|
+
a = ::Relay.new()
|
24
|
+
b = ::Relay.new()
|
25
|
+
c = ::Relay.new()
|
26
|
+
all = []
|
27
|
+
::Opee::Env.each_actor { |x| all << x }
|
28
|
+
assert_equal([a, b, c], all)
|
29
|
+
a.close()
|
30
|
+
b.close()
|
31
|
+
c.close()
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_opee_env_shutdown
|
35
|
+
a = ::Relay.new()
|
36
|
+
::Opee::Env.shutdown
|
37
|
+
assert_raise(ThreadError) { a.start() }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_opee_env_wait_close
|
41
|
+
# chain 3 together to make sure all processing is completed
|
42
|
+
a = ::Relay.new()
|
43
|
+
b = ::Relay.new(:buddy => a)
|
44
|
+
c = ::Relay.new(:buddy => b)
|
45
|
+
c.ask(:relay, 7)
|
17
46
|
::Opee::Env.wait_close()
|
18
47
|
assert_equal(7, a.last_data)
|
19
48
|
a.close()
|
20
49
|
end
|
21
50
|
|
51
|
+
def test_opee_env_start_stop
|
52
|
+
a = ::Relay.new()
|
53
|
+
::Opee::Env.stop()
|
54
|
+
a.ask(:relay, 5)
|
55
|
+
assert_equal(1, ::Opee::Env.queue_count())
|
56
|
+
a.ask(:relay, 7)
|
57
|
+
assert_equal(2, ::Opee::Env.queue_count())
|
58
|
+
::Opee::Env.start()
|
59
|
+
::Opee::Env.wait_close()
|
60
|
+
assert_equal(7, a.last_data)
|
61
|
+
end
|
62
|
+
|
22
63
|
end # OpeeTest
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'An experimental Object-base Parallel Evaluation Environment. '
|
15
15
|
email: peter@ohler.com
|