wakame 0.4.2 → 0.5.0
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/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
|