wakame 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/app_generators/wakame/templates/cluster/resources/markers/http_application_server.rb +3 -0
- data/app_generators/wakame/templates/cluster/resources/markers/http_asset_server.rb +2 -0
- data/app_generators/wakame/templates/cluster/resources/markers/http_server.rb +9 -0
- data/app_generators/wakame/templates/config/cluster.rb +36 -99
- data/app_generators/wakame/templates/config/init.d/wakame-agent +3 -3
- data/app_generators/wakame/templates/config/init.d/wakame-master +3 -3
- data/app_generators/wakame/wakame_generator.rb +5 -1
- data/contrib/imagesetup.sh +9 -5
- data/lib/ext/uri.rb +13 -0
- data/lib/wakame/action.rb +46 -21
- data/lib/wakame/{rule_engine.rb → action_manager.rb} +148 -36
- data/lib/wakame/actions/deploy_config.rb +35 -0
- data/lib/wakame/actions/launch_cluster.rb +8 -10
- data/lib/wakame/actions/launch_vm.rb +26 -20
- data/lib/wakame/actions/migrate_service.rb +30 -19
- data/lib/wakame/actions/notify_child_changed.rb +34 -0
- data/lib/wakame/actions/notify_parent_changed.rb +34 -0
- data/lib/wakame/actions/propagate_resource.rb +27 -0
- data/lib/wakame/actions/propagate_service.rb +27 -0
- data/lib/wakame/actions/reload_service.rb +21 -9
- data/lib/wakame/actions/shutdown_cluster.rb +3 -3
- data/lib/wakame/actions/shutdown_vm.rb +14 -5
- data/lib/wakame/actions/start_service.rb +53 -47
- data/lib/wakame/actions/stop_service.rb +35 -23
- data/lib/wakame/actor/system.rb +6 -3
- data/lib/wakame/agent.rb +29 -7
- data/lib/wakame/amqp_client.rb +26 -5
- data/lib/wakame/command/action_status.rb +7 -7
- data/lib/wakame/command/actor.rb +10 -10
- data/lib/wakame/command/import_cluster_config.rb +10 -0
- data/lib/wakame/command/launch_cluster.rb +2 -2
- data/lib/wakame/command/launch_vm.rb +3 -3
- data/lib/wakame/command/migrate_service.rb +7 -7
- data/lib/wakame/command/propagate_resource.rb +42 -0
- data/lib/wakame/command/propagate_service.rb +21 -19
- data/lib/wakame/command/reload_service.rb +3 -13
- data/lib/wakame/command/shutdown_cluster.rb +2 -2
- data/lib/wakame/command/start_service.rb +14 -0
- data/lib/wakame/command/status.rb +32 -10
- data/lib/wakame/command/stop_service.rb +27 -21
- data/lib/wakame/command.rb +19 -3
- data/lib/wakame/command_queue.rb +87 -67
- data/lib/wakame/configuration.rb +6 -0
- data/lib/wakame/event.rb +17 -0
- data/lib/wakame/event_dispatcher.rb +32 -23
- data/lib/wakame/graph.rb +2 -1
- data/lib/wakame/initializer.rb +11 -8
- data/lib/wakame/master.rb +327 -209
- data/lib/wakame/monitor/agent.rb +5 -1
- data/lib/wakame/monitor/service.rb +6 -5
- data/lib/wakame/packets.rb +13 -21
- data/lib/wakame/runner/administrator_command.rb +383 -264
- data/lib/wakame/runner/agent.rb +1 -5
- data/lib/wakame/runner/master.rb +0 -3
- data/lib/wakame/service.rb +817 -538
- data/lib/wakame/status_db.rb +383 -0
- data/lib/wakame/template.rb +27 -130
- data/lib/wakame/trigger.rb +10 -18
- data/lib/wakame/triggers/instance_count_update.rb +1 -1
- data/lib/wakame/triggers/load_history.rb +1 -1
- data/lib/wakame/triggers/maintain_ssh_known_hosts.rb +8 -5
- data/lib/wakame/triggers/shutdown_unused_vm.rb +1 -1
- data/lib/wakame/util.rb +64 -55
- data/lib/wakame.rb +4 -0
- data/tests/test_action_manager.rb +111 -0
- data/tests/test_service.rb +128 -23
- data/tests/test_status_db.rb +82 -0
- data/tests/test_uri_amqp.rb +10 -0
- data/wakame_generators/resource/templates/apache_app/apache_app.rb +19 -18
- data/wakame_generators/resource/templates/apache_app/conf/apache2.conf +14 -2
- data/wakame_generators/resource/templates/apache_app/conf/system-app.conf +1 -1
- data/wakame_generators/resource/templates/apache_app/conf/vh/aaa.test.conf +9 -0
- data/wakame_generators/resource/templates/apache_lb/apache_lb.rb +21 -20
- data/wakame_generators/resource/templates/apache_lb/conf/apache2.conf +14 -2
- data/wakame_generators/resource/templates/apache_lb/conf/system-lb.conf +17 -2
- data/wakame_generators/resource/templates/apache_lb/conf/vh/aaa.test.conf +37 -0
- data/wakame_generators/resource/templates/apache_www/apache_www.rb +20 -18
- data/wakame_generators/resource/templates/apache_www/conf/apache2.conf +14 -2
- data/wakame_generators/resource/templates/apache_www/conf/system-www.conf +1 -1
- data/wakame_generators/resource/templates/apache_www/conf/vh/aaa.test.conf +9 -0
- data/wakame_generators/resource/templates/ec2_elastic_ip/ec2_elastic_ip.rb +6 -8
- data/wakame_generators/resource/templates/ec2_elb/ec2_elb.rb +7 -6
- data/wakame_generators/resource/templates/memcached/conf/memcached.conf +47 -0
- data/wakame_generators/resource/templates/memcached/init.d/memcached +61 -0
- data/wakame_generators/resource/templates/memcached/memcached.rb +73 -0
- data/wakame_generators/resource/templates/mysql_master/conf/my.cnf +5 -7
- data/wakame_generators/resource/templates/mysql_master/mysql_master.rb +35 -34
- data/wakame_generators/resource/templates/mysql_slave/conf/my.cnf +6 -6
- data/wakame_generators/resource/templates/mysql_slave/mysql_slave.rb +21 -24
- data/wakame_generators/resource/templates/nginx/conf/nginx.conf +17 -27
- data/wakame_generators/resource/templates/nginx/conf/vh/aaa.test.conf +30 -0
- data/wakame_generators/resource/templates/nginx/nginx.rb +18 -18
- metadata +34 -21
- data/lib/wakame/actions/propagate_instances.rb +0 -70
- data/lib/wakame/manager/commands.rb +0 -134
- data/lib/wakame/rule.rb +0 -116
- data/lib/wakame/triggers/process_command.rb +0 -41
- data/tests/test_rule_engine.rb +0 -127
- data/wakame_generators/resource/templates/apache_app/conf/sites-app.conf +0 -23
- data/wakame_generators/resource/templates/apache_lb/conf/sites-lb.conf +0 -54
- data/wakame_generators/resource/templates/apache_www/conf/sites-www.conf +0 -23
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.5.0 2009-09-18
|
2
|
+
|
3
|
+
* Add Memcached resource.
|
4
|
+
|
5
|
+
* Use SQL based persistent store for the status information.
|
6
|
+
|
7
|
+
* Many internal changes along with the above change.
|
8
|
+
|
1
9
|
== 0.4.2 2009-07-24
|
2
10
|
|
3
11
|
* Add Web API for master control. (Note that the API design is not fixed yet)
|
data/Rakefile
CHANGED
@@ -17,8 +17,7 @@ __END__
|
|
17
17
|
gem.rubyforge_project = 'wakame'
|
18
18
|
gem.executables = ['wakame']
|
19
19
|
[['amqp','>= 0.6.0'],
|
20
|
-
['
|
21
|
-
['right_aws','>= 1.10.0'],
|
20
|
+
['right_aws','>= 1.10.0'], # Ec2ELB works with 1.10.99 in their github.
|
22
21
|
['eventmachine','>= 0.12.8'],
|
23
22
|
['rake', '>= 0.8.7'],
|
24
23
|
['log4r', '>= 1.0.5'],
|
@@ -28,7 +27,8 @@ __END__
|
|
28
27
|
['jeweler', '>= 1.0.0'],
|
29
28
|
['rack', '>= 1.0.0'],
|
30
29
|
['thin', '>= 1.2.2'],
|
31
|
-
['json', '>= 1.1.7']
|
30
|
+
['json', '>= 1.1.7'],
|
31
|
+
['sequel', '>= 3.2.0']
|
32
32
|
].each { |i|
|
33
33
|
gem.add_dependency(i[0], i[1])
|
34
34
|
}
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
@@ -1,100 +1,37 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
define_cluster('WebCluster1') { |c|
|
2
|
+
c.add_resource(Apache_APP.new) { |r|
|
3
|
+
r.listen_port = 8001
|
4
|
+
r.max_instances = 5
|
5
|
+
}
|
6
|
+
c.add_resource(Nginx.new)
|
7
|
+
c.add_resource(Ec2ELB.new) { |r|
|
8
|
+
r.elb_name = 'xxxxxxx'
|
9
|
+
}
|
10
|
+
c.add_resource(MySQL_Master.new) {|r|
|
11
|
+
r.mysqld_basedir = '/home/wakame/mysql'
|
12
|
+
r.ebs_volume = 'vol-xxxxxxx'
|
13
|
+
r.ebs_device = '/dev/sdm'
|
14
|
+
}
|
15
|
+
|
16
|
+
c.set_dependency(Apache_APP, Nginx)
|
17
|
+
c.set_dependency(Nginx, Ec2ELB)
|
18
|
+
c.set_dependency(MySQL_Master, Apache_APP)
|
19
|
+
|
20
|
+
host = c.add_cloud_host { |h|
|
21
|
+
#h.vm_spec.availability_zone = 'us-east-1a'
|
22
|
+
}
|
23
|
+
c.propagate(Nginx, host.id)
|
24
|
+
c.propagate(Apache_APP, host.id)
|
25
|
+
c.propagate(MySQL_Master, host.id)
|
26
|
+
c.propagate(Ec2ELB)
|
27
|
+
|
28
|
+
c.define_triggers {|r|
|
29
|
+
#r.register_trigger(Wakame::Triggers::MaintainSshKnownHosts.new)
|
30
|
+
#r.register_trigger(Wakame::Triggers::LoadHistoryMonitor.new)
|
31
|
+
#r.register_trigger(Wakame::Triggers::InstanceCountUpdate.new)
|
32
|
+
#r.register_trigger(Wakame::Triggers::ScaleOutWhenHighLoad.new)
|
33
|
+
#r.register_trigger(Wakame::Triggers::ShutdownUnusedVM.new)
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
3
37
|
|
4
|
-
module HttpAppServer; end
|
5
|
-
module HttpAssetServer; end
|
6
|
-
module HttpLoadBalanceServer; end
|
7
|
-
|
8
|
-
VirtualHost = Class.new(OpenStruct)
|
9
|
-
def initialize(master, &blk)
|
10
|
-
super(master) { |c|
|
11
|
-
c.add_resource(Ec2ElasticIp.new)
|
12
|
-
c.add_resource(Apache_WWW.new)
|
13
|
-
c.add_resource(Apache_APP.new)
|
14
|
-
c.add_resource(Apache_LB.new)
|
15
|
-
c.add_resource(MySQL_Master.new)
|
16
|
-
#c.add_resource(MySQL_Slave.new)
|
17
|
-
|
18
|
-
c.set_dependency(Apache_LB, Ec2ElasticIp)
|
19
|
-
c.set_dependency(Apache_WWW, Apache_LB)
|
20
|
-
c.set_dependency(Apache_APP, Apache_LB)
|
21
|
-
c.set_dependency(MySQL_Master, Apache_APP)
|
22
|
-
#c.set_dependency(MySQL_Master, MySQL_Slave)
|
23
|
-
}
|
24
|
-
|
25
|
-
define_rule { |r|
|
26
|
-
r.register_trigger(Wakame::Triggers::ProcessCommand.new)
|
27
|
-
r.register_trigger(Wakame::Triggers::MaintainSshKnownHosts.new)
|
28
|
-
#r.register_trigger(Wakame::Triggers::LoadHistoryMonitor.new)
|
29
|
-
#r.register_trigger(Wakame::Triggers::InstanceCountUpdate.new)
|
30
|
-
#r.register_trigger(Wakame::Triggers::ScaleOutWhenHighLoad.new)
|
31
|
-
#r.register_trigger(Wakame::Triggers::ShutdownUnusedVM.new)
|
32
|
-
}
|
33
|
-
|
34
|
-
add_virtual_host(VirtualHost.new(:server_name=>'aaa.test', :document_root=>'/home/wakame/app/development/test/public'))
|
35
|
-
add_virtual_host(VirtualHost.new(:server_name=>'bbb.test', :document_root=>'/home/wakame/app/development/test/public'))
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def virtual_hosts
|
40
|
-
@virtual_hosts ||= []
|
41
|
-
end
|
42
|
-
|
43
|
-
def add_virtual_host(vh)
|
44
|
-
virtual_hosts << vh
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def each_app(&blk)
|
49
|
-
each_instance(HttpAppServer) { |n|
|
50
|
-
blk.call(n)
|
51
|
-
}
|
52
|
-
end
|
53
|
-
|
54
|
-
def each_www(&blk)
|
55
|
-
each_instance(HttpAssetServer) { |n|
|
56
|
-
blk.call(n)
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
def each_mysql(&blk)
|
61
|
-
each_instance(MySQL_Master) { |n|
|
62
|
-
blk.call(n)
|
63
|
-
}
|
64
|
-
end
|
65
|
-
|
66
|
-
def each_mysql_master(&blk)
|
67
|
-
each_instance(MySQL_Master) { |n|
|
68
|
-
blk.call(n)
|
69
|
-
}
|
70
|
-
end
|
71
|
-
|
72
|
-
def fetch_mysql_master_ip
|
73
|
-
mysql_master_ip = nil
|
74
|
-
each_mysql_master do |mysql|
|
75
|
-
mysql_master_ip = mysql.agent.agent_ip
|
76
|
-
end
|
77
|
-
mysql_master_ip
|
78
|
-
end
|
79
|
-
|
80
|
-
def each_mysql_slave(&blk)
|
81
|
-
each_instance(MySQL_Slave) { |n|
|
82
|
-
blk.call(n)
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
def fetch_mysql_slave_ip
|
87
|
-
mysql_slave_ips = []
|
88
|
-
each_mysql_slave do |mysql|
|
89
|
-
mysql_slave_ips << mysql.agent.agent_ip
|
90
|
-
end
|
91
|
-
mysql_master_ips
|
92
|
-
end
|
93
|
-
|
94
|
-
# def each_postgresql(&blk)
|
95
|
-
# each_instance(PostgreSQL_Master) { |n|
|
96
|
-
# blk.call(n)
|
97
|
-
# }
|
98
|
-
# end
|
99
|
-
|
100
|
-
end
|
@@ -19,9 +19,9 @@ PIDFILE=/var/run/wakame/wakame-agent.pid
|
|
19
19
|
#LSBNAMES='-l' # Uncomment for LSB name support in /etc/cron.d/
|
20
20
|
|
21
21
|
. /lib/lsb/init-functions
|
22
|
-
if [ -z $
|
22
|
+
if [ -z $WAKAME_ROOT ]; then
|
23
23
|
[ -f /etc/default/wakame ] && . /etc/default/wakame
|
24
|
-
export GEM_HOME
|
24
|
+
export GEM_HOME WAKAME_ROOT WAKAME_ENV
|
25
25
|
fi
|
26
26
|
|
27
27
|
start_agent()
|
@@ -40,7 +40,7 @@ start_agent()
|
|
40
40
|
opts="$opts -s $i"
|
41
41
|
done
|
42
42
|
fi
|
43
|
-
start-stop-daemon --start --quiet --pidfile $PIDFILE --name wakame-agent --startas $
|
43
|
+
start-stop-daemon --start --quiet --pidfile $PIDFILE --name wakame-agent --startas $WAKAME_ROOT/bin/wakame-agent -- $opts $LSBNAMES
|
44
44
|
}
|
45
45
|
|
46
46
|
stop_agent()
|
@@ -21,9 +21,9 @@ PIDFILE=/var/run/wakame/wakame-master.pid
|
|
21
21
|
#LSBNAMES='-l' # Uncomment for LSB name support in /etc/cron.d/
|
22
22
|
|
23
23
|
. /lib/lsb/init-functions
|
24
|
-
if [ -z $
|
24
|
+
if [ -z $WAKAME_ROOT ]; then
|
25
25
|
[ -f /etc/default/wakame ] && . /etc/default/wakame
|
26
|
-
export GEM_HOME
|
26
|
+
export GEM_HOME WAKAME_ROOT WAKAME_ENV
|
27
27
|
fi
|
28
28
|
|
29
29
|
start_master()
|
@@ -41,7 +41,7 @@ start_master()
|
|
41
41
|
chown "$USER:$GROUP" $pid_dir
|
42
42
|
fi
|
43
43
|
|
44
|
-
start-stop-daemon --start --quiet --pidfile $PIDFILE --name wakame-master --startas $
|
44
|
+
start-stop-daemon --start --quiet --pidfile $PIDFILE --name wakame-master --startas $WAKAME_ROOT/bin/wakame-master -- -u $USER $LSBNAMES
|
45
45
|
|
46
46
|
}
|
47
47
|
stop_master()
|
@@ -14,6 +14,7 @@ class WakameGenerator < RubiGen::Base
|
|
14
14
|
cluster/actions
|
15
15
|
cluster/triggers
|
16
16
|
cluster/resources
|
17
|
+
cluster/resources/markers
|
17
18
|
cluster/commands
|
18
19
|
config
|
19
20
|
config/init.d
|
@@ -58,7 +59,10 @@ class WakameGenerator < RubiGen::Base
|
|
58
59
|
BASEDIRS.each { |path| m.directory path }
|
59
60
|
|
60
61
|
m.file_copy_each %w(Rakefile README)
|
61
|
-
m.file_copy_each %w(config/boot.rb config/cluster.rb config/environments/common.rb config/environments/stand_alone.rb config/environments/ec2.rb
|
62
|
+
m.file_copy_each %w(config/boot.rb config/cluster.rb config/environments/common.rb config/environments/stand_alone.rb config/environments/ec2.rb
|
63
|
+
cluster/resources/markers/http_application_server.rb
|
64
|
+
cluster/resources/markers/http_asset_server.rb
|
65
|
+
cluster/resources/markers/http_server.rb)
|
62
66
|
m.dependency "install_rubigen_scripts", [destination_root, :wakame]
|
63
67
|
|
64
68
|
%w(wakame-master wakame-agent wakameadm).each do |script|
|
data/contrib/imagesetup.sh
CHANGED
@@ -9,12 +9,14 @@ apt-get -y install apache2-mpm-prefork libapache2-mod-rpaf
|
|
9
9
|
apt-get -y install mysql-server mysql-client
|
10
10
|
apt-get -y install erlang-nox
|
11
11
|
apt-get -y install unzip zip rsync libopenssl-ruby libhmac-ruby rubygems irb ri rdoc sysstat
|
12
|
+
apt-get -y install apache2-prefork-dev ruby-dev make g++ libopenssl-ruby subversion
|
13
|
+
apt-get -y install memcached
|
12
14
|
|
13
15
|
apt-get clean
|
14
16
|
|
15
17
|
(cd /tmp;
|
16
|
-
wget http://www.rabbitmq.com/releases/rabbitmq-server/v1.
|
17
|
-
dpkg -i rabbitmq-server_1.
|
18
|
+
wget http://www.rabbitmq.com/releases/rabbitmq-server/v1.6.0/rabbitmq-server_1.6.0-1_all.deb
|
19
|
+
dpkg -i rabbitmq-server_1.6.0-1_all.deb
|
18
20
|
)
|
19
21
|
|
20
22
|
|
@@ -40,7 +42,7 @@ EOF
|
|
40
42
|
fi
|
41
43
|
|
42
44
|
cat <<EOF > /etc/default/wakame
|
43
|
-
|
45
|
+
WAKAME_ROOT=/home/wakame/wakame.proj
|
44
46
|
GEM_HOME=/usr/local/gems
|
45
47
|
EOF
|
46
48
|
|
@@ -48,12 +50,14 @@ update-rc.d -f apache2 remove
|
|
48
50
|
update-rc.d -f mysql remove
|
49
51
|
update-rc.d -f mysql-ndb remove
|
50
52
|
update-rc.d -f mysql-ndb-mgm remove
|
53
|
+
update-rc.d -f mysql-ndb-mgm memcached
|
51
54
|
# Disable apparmor
|
52
55
|
update-rc.d -f apparmor remove
|
53
56
|
|
54
|
-
cat <<EOF > /usr/local/bin/passenger_ruby.sh
|
57
|
+
cat <<'EOF' > /usr/local/bin/passenger_ruby.sh
|
55
58
|
#!/bin/sh
|
56
|
-
|
59
|
+
. /etc/environment
|
60
|
+
export RUBYLIB GEM_HOME
|
57
61
|
exec /usr/bin/ruby $@
|
58
62
|
EOF
|
59
63
|
chmod 755 /usr/local/bin/passenger_ruby.sh
|
data/lib/ext/uri.rb
CHANGED
@@ -8,7 +8,20 @@ module URI
|
|
8
8
|
:path
|
9
9
|
].freeze
|
10
10
|
|
11
|
+
DEFAULT_PORT=5672
|
12
|
+
|
13
|
+
def self.build(args)
|
14
|
+
tmp = Util::make_components_hash(self, args)
|
15
|
+
return super(tmp)
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(*args)
|
19
|
+
args[5] = '/' if args[5].nil? || args[5] == ''
|
20
|
+
super(*args)
|
21
|
+
end
|
22
|
+
|
11
23
|
alias :vhost :path
|
24
|
+
alias :vhost= :path=
|
12
25
|
end
|
13
26
|
|
14
27
|
@@schemes['AMQP'] = AMQP
|
data/lib/wakame/action.rb
CHANGED
@@ -8,19 +8,25 @@ module Wakame
|
|
8
8
|
def_attribute :completion_status
|
9
9
|
def_attribute :parent_action
|
10
10
|
|
11
|
-
|
11
|
+
attr_accessor :action_manager
|
12
12
|
|
13
13
|
def master
|
14
|
-
|
14
|
+
action_manager.master
|
15
15
|
end
|
16
16
|
|
17
17
|
def agent_monitor
|
18
|
-
|
18
|
+
master.agent_monitor
|
19
19
|
end
|
20
20
|
|
21
|
+
# Tentative utility method for
|
21
22
|
def service_cluster
|
22
|
-
|
23
|
+
cluster_id = master.cluster_manager.clusters.first
|
24
|
+
raise "There is no cluster loaded" if cluster_id.nil?
|
25
|
+
|
26
|
+
Service::ServiceCluster.find(cluster_id)
|
23
27
|
end
|
28
|
+
alias :cluster :service_cluster
|
29
|
+
|
24
30
|
def status=(status)
|
25
31
|
if @status != status
|
26
32
|
@status = status
|
@@ -35,26 +41,27 @@ module Wakame
|
|
35
41
|
@subactions ||= []
|
36
42
|
end
|
37
43
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
44
|
+
def trigger_action(subaction=nil, &blk)
|
45
|
+
if blk
|
46
|
+
subaction = ProcAction.new(blk)
|
47
|
+
end
|
48
|
+
|
43
49
|
subactions << subaction
|
44
50
|
subaction.parent_action = self
|
45
51
|
subaction.job_id = self.job_id
|
46
|
-
subaction.
|
52
|
+
subaction.action_manager = self.action_manager
|
47
53
|
|
48
|
-
|
54
|
+
action_manager.run_action(subaction)
|
49
55
|
end
|
50
56
|
|
51
|
-
def flush_subactions(sec=
|
52
|
-
job_context =
|
57
|
+
def flush_subactions(sec=60*30)
|
58
|
+
job_context = action_manager.active_jobs[self.job_id]
|
53
59
|
return if job_context.nil?
|
54
60
|
|
55
|
-
timeout(sec
|
61
|
+
timeout(sec) {
|
56
62
|
until all_subactions_complete?
|
57
63
|
#Wakame.log.debug "#{self.class} all_subactions_complete?=#{all_subactions_complete?}"
|
64
|
+
Thread.pass
|
58
65
|
src = notify_queue.deq
|
59
66
|
# Exit the current action when a subaction notified exception.
|
60
67
|
if src.is_a?(Exception)
|
@@ -64,6 +71,7 @@ module Wakame
|
|
64
71
|
end
|
65
72
|
}
|
66
73
|
end
|
74
|
+
thread_immutable_methods :flush_subactions
|
67
75
|
|
68
76
|
def all_subactions_complete?
|
69
77
|
subactions.each { |a|
|
@@ -76,6 +84,7 @@ module Wakame
|
|
76
84
|
def notify_queue
|
77
85
|
@notify_queue ||= ::Queue.new
|
78
86
|
end
|
87
|
+
private :notify_queue
|
79
88
|
|
80
89
|
def notify(src=nil)
|
81
90
|
#Wakame.log.debug("#{self.class}.notify() has been called")
|
@@ -96,7 +105,7 @@ module Wakame
|
|
96
105
|
a.walk_subactions(&blk)
|
97
106
|
}
|
98
107
|
end
|
99
|
-
|
108
|
+
|
100
109
|
def actor_request(agent_id, path, *args, &blk)
|
101
110
|
request = master.actor_request(agent_id, path, *args)
|
102
111
|
if blk
|
@@ -110,23 +119,24 @@ module Wakame
|
|
110
119
|
request = actor_request(agent_id, path, *args).request
|
111
120
|
request.wait
|
112
121
|
end
|
113
|
-
|
122
|
+
|
114
123
|
def notes
|
115
|
-
|
124
|
+
action_manager.active_jobs[self.job_id][:notes]
|
116
125
|
end
|
117
126
|
|
118
127
|
# Set the lock flags to resources
|
119
128
|
def acquire_lock(&blk)
|
120
|
-
|
129
|
+
StatusDB.barrier {
|
121
130
|
reslist = []
|
122
131
|
blk.call(reslist)
|
123
132
|
reslist.flatten!
|
124
|
-
reslist.each {|r|
|
133
|
+
reslist.each {|r| action_manager.lock_queue.set(r.to_s, self.job_id) }
|
125
134
|
}
|
126
135
|
|
127
|
-
|
136
|
+
action_manager.lock_queue.wait(self.job_id)
|
128
137
|
end
|
129
|
-
|
138
|
+
thread_immutable_methods :acquire_lock
|
139
|
+
|
130
140
|
def run
|
131
141
|
raise NotImplementedError
|
132
142
|
end
|
@@ -137,5 +147,20 @@ module Wakame
|
|
137
147
|
def on_canceled
|
138
148
|
end
|
139
149
|
|
150
|
+
|
151
|
+
class ProcAction < Action
|
152
|
+
def initialize(proc_obj)
|
153
|
+
raise ArgumentError unless proc_obj.is_a? Proc
|
154
|
+
@proc_obj = proc_obj
|
155
|
+
end
|
156
|
+
|
157
|
+
def run()
|
158
|
+
@proc_obj.call(self)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
|
140
163
|
end
|
164
|
+
|
165
|
+
|
141
166
|
end
|