isono 0.2.12 → 0.2.13

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.
@@ -2,14 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "isono"
5
- s.version = "0.2.12"
5
+ s.version = "0.2.13"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["axsh Ltd.", "Masahiro Fujiwara"]
9
- s.date = "2012-06-05"
9
+ s.date = "2012-08-08"
10
10
  s.email = ["dev@axsh.net", "m-fujiwara@axsh.net"]
11
11
  s.executables = ["cli"]
12
- s.files = [".gitignore", "LICENSE", "NOTICE", "Rakefile", "bin/cli", "isono.gemspec", "lib/ext/shellwords.rb", "lib/isono.rb", "lib/isono/amqp_client.rb", "lib/isono/daemonize.rb", "lib/isono/event_delegate_context.rb", "lib/isono/event_observable.rb", "lib/isono/logger.rb", "lib/isono/manifest.rb", "lib/isono/messaging_client.rb", "lib/isono/models/event_log.rb", "lib/isono/models/job_state.rb", "lib/isono/models/node_state.rb", "lib/isono/models/resource_instance.rb", "lib/isono/node.rb", "lib/isono/node_modules/base.rb", "lib/isono/node_modules/data_store.rb", "lib/isono/node_modules/event_channel.rb", "lib/isono/node_modules/event_logger.rb", "lib/isono/node_modules/job_channel.rb", "lib/isono/node_modules/job_collector.rb", "lib/isono/node_modules/job_worker.rb", "lib/isono/node_modules/node_collector.rb", "lib/isono/node_modules/node_heartbeat.rb", "lib/isono/node_modules/rpc_channel.rb", "lib/isono/rack.rb", "lib/isono/rack/builder.rb", "lib/isono/rack/data_store.rb", "lib/isono/rack/job.rb", "lib/isono/rack/map.rb", "lib/isono/rack/object_method.rb", "lib/isono/rack/proc.rb", "lib/isono/rack/thread_pass.rb", "lib/isono/resource_manifest.rb", "lib/isono/runner/base.rb", "lib/isono/runner/cli.rb", "lib/isono/runner/rpc_server.rb", "lib/isono/serializer.rb", "lib/isono/thread_pool.rb", "lib/isono/util.rb", "lib/isono/version.rb", "spec/amqp_client_spec.rb", "spec/event_observable_spec.rb", "spec/file_channel_spec.rb", "spec/job_channel_spec.rb", "spec/logger_spec.rb", "spec/manifest_spec.rb", "spec/node_spec.rb", "spec/resource_loader_spec.rb", "spec/rpc_channel_spec.rb", "spec/spec_helper.rb", "spec/thread_pool_spec.rb", "spec/util_spec.rb", "tasks/load_resource_manifest.rake"]
12
+ s.files = [".gitignore", "LICENSE", "NOTICE", "Rakefile", "bin/cli", "isono.gemspec", "lib/ext/shellwords.rb", "lib/isono.rb", "lib/isono/amqp_client.rb", "lib/isono/daemonize.rb", "lib/isono/event_delegate_context.rb", "lib/isono/event_observable.rb", "lib/isono/logger.rb", "lib/isono/manifest.rb", "lib/isono/messaging_client.rb", "lib/isono/models/event_log.rb", "lib/isono/models/job_state.rb", "lib/isono/models/node_state.rb", "lib/isono/models/resource_instance.rb", "lib/isono/node.rb", "lib/isono/node_modules/base.rb", "lib/isono/node_modules/data_store.rb", "lib/isono/node_modules/event_channel.rb", "lib/isono/node_modules/event_logger.rb", "lib/isono/node_modules/job_channel.rb", "lib/isono/node_modules/job_collector.rb", "lib/isono/node_modules/job_worker.rb", "lib/isono/node_modules/node_collector.rb", "lib/isono/node_modules/node_heartbeat.rb", "lib/isono/node_modules/rpc_channel.rb", "lib/isono/rack.rb", "lib/isono/rack/builder.rb", "lib/isono/rack/data_store.rb", "lib/isono/rack/job.rb", "lib/isono/rack/map.rb", "lib/isono/rack/object_method.rb", "lib/isono/rack/proc.rb", "lib/isono/rack/sequel.rb", "lib/isono/rack/thread_pass.rb", "lib/isono/resource_manifest.rb", "lib/isono/runner/base.rb", "lib/isono/runner/cli.rb", "lib/isono/runner/rpc_server.rb", "lib/isono/serializer.rb", "lib/isono/thread_pool.rb", "lib/isono/util.rb", "lib/isono/version.rb", "spec/amqp_client_spec.rb", "spec/event_observable_spec.rb", "spec/file_channel_spec.rb", "spec/job_channel_spec.rb", "spec/logger_spec.rb", "spec/manifest_spec.rb", "spec/node_spec.rb", "spec/resource_loader_spec.rb", "spec/rpc_channel_spec.rb", "spec/spec_helper.rb", "spec/thread_pool_spec.rb", "spec/util_spec.rb", "tasks/load_resource_manifest.rake"]
13
13
  s.homepage = "http://github.com/axsh/isono"
14
14
  s.require_paths = ["lib"]
15
15
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
@@ -41,6 +41,7 @@ module Isono
41
41
  autoload :Job, 'isono/rack/job'
42
42
  autoload :DataStore, 'isono/rack/data_store'
43
43
  autoload :Map, 'isono/rack/map'
44
+ autoload :Sequel, 'isono/rack/sequel'
44
45
  end
45
46
 
46
47
  module Models
@@ -17,6 +17,7 @@ module Isono
17
17
  column :node_id, :varchar, :size=>80, :null=>false
18
18
  column :state, :varchar, :size=>10, :null=>false
19
19
  column :message, :text, :null=>false, :default=>''
20
+ column :job_name, :varchar, :size=>255, :null=>true
20
21
  column :created_at, :datetime, :null=>false
21
22
  column :updated_at, :datetime, :null=>false
22
23
  column :started_at, :datetime, :null=>true
@@ -54,6 +54,7 @@ module Isono
54
54
  req.timeout_sec = config_section.timeout_sec
55
55
  req.request[:job_id] = Util.gen_id
56
56
  req.request[:session_id] = req.request[:job_id]
57
+ req.request[:job_name] = command
57
58
 
58
59
  # A job is working on this current thread if cur_job_ctx is
59
60
  # not nil. Let the new job know the current job ID
@@ -16,21 +16,13 @@ module Isono
16
16
  end
17
17
 
18
18
  class Dispatch
19
- # Register new job
20
- def regist
19
+ def record
21
20
  params = @req.args[0]
22
21
  params[:node_id]=@req.sender
23
- job =Models::JobState.new
24
- job.set_fields(params, [:job_id, :parent_job_id, :session_id, :node_id, :state]).save
22
+ job =Models::JobState.find_or_create(:job_id=>params[:job_id])
23
+ job.set_fields(params, [:parent_job_id, :session_id, :node_id, :state, :started_at, :finished_at, :job_name]).save_changes
25
24
  end
26
25
 
27
- def update
28
- params = @req.args[0]
29
- job = Models::JobState.find(:job_id=>params[:job_id])
30
- raise "Unknown or JOB ID: #{params[:job_id]}" if job.nil?
31
- job.set_fields(params, [:state, :started_at, :finished_at]).save
32
- end
33
-
34
26
  def call(req, res)
35
27
  @req, @res = req, res
36
28
  raise Rack::UnknownMethodError if @req.command == 'call'
@@ -47,7 +47,7 @@ module Isono
47
47
  @active_jobs[job.job_id] = job
48
48
  rpc = RpcChannel.new(node)
49
49
 
50
- rpc.request('job-collector', 'regist', job.to_hash) { |req|
50
+ rpc.request('job-collector', 'record', job.to_hash) { |req|
51
51
  req.oneshot = true
52
52
  }
53
53
 
@@ -55,7 +55,7 @@ module Isono
55
55
  begin
56
56
  Thread.current[JOB_CTX_KEY]=job
57
57
  job.process_event(:on_start)
58
- rpc.request('job-collector', 'update', job.to_hash) { |req|
58
+ rpc.request('job-collector', 'record', job.to_hash) { |req|
59
59
  req.oneshot = true
60
60
  }
61
61
  job.run_cb.call
@@ -73,7 +73,7 @@ module Isono
73
73
  ensure
74
74
  Thread.current[JOB_CTX_KEY]=nil
75
75
  EventMachine.schedule {
76
- rpc.request('job-collector', 'update', job.to_hash) { |req|
76
+ rpc.request('job-collector', 'record', job.to_hash) { |req|
77
77
  req.oneshot = true
78
78
  }
79
79
  @active_jobs.delete(job.job_id)
@@ -121,6 +121,7 @@ module Isono
121
121
  super({:job_id => job_id,
122
122
  :parent_job_id => nil,
123
123
  :session_id => job_id,
124
+ :job_name => nil,
124
125
  :started_at => nil,
125
126
  :finished_at => nil,
126
127
  :finish_status => nil,
@@ -136,11 +137,11 @@ module Isono
136
137
  when [:on_start, :init]
137
138
  @state = :running
138
139
  self.started_at = Time.now
139
- logger.info("Job start #{session_id} (Local ID: #{job_id})")
140
+ logger.info("Job start #{session_id} (Local ID: #{job_id})[ #{job_name} ]")
140
141
  when [:on_done, :running]
141
142
  @state = :done
142
143
  self.finished_at = Time.now
143
- logger.info("Job complete #{session_id} (Local ID: #{job_id}): #{elapsed_time} sec")
144
+ logger.info("Job complete #{session_id} (Local ID: #{job_id})[ #{job_name} ]: #{elapsed_time} sec")
144
145
  when [:on_fail, :running]
145
146
  @state = :failed
146
147
  on_fail(args[0])
@@ -167,7 +168,7 @@ module Isono
167
168
  private
168
169
  def on_fail(e)
169
170
  self.finished_at = Time.now
170
- logger.error("Job failed #{session_id}: #{e}")
171
+ logger.error("Job failed #{session_id} [ #{job_name} ]: #{e}")
171
172
  logger.error(e)
172
173
  end
173
174
 
@@ -52,6 +52,7 @@ module Rack
52
52
  job.job_id = req.r[:job_id]
53
53
  job.parent_job_id = req.r[:parent_job_id]
54
54
  job.session_id = req.r[:session_id]
55
+ job.job_name = req.r[:job_name]
55
56
  job.run_cb = proc {
56
57
  begin
57
58
  @app.call(JobRequest.new(req.r, job), JobResponse.new(res.ctx, job))
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'sequel'
4
+
5
+ module Isono
6
+ module Rack
7
+ # Middleware for Sequel transaction.
8
+ class Sequel < Decorator
9
+ include Isono::Logger
10
+
11
+ def initialize(app, retry_count=10)
12
+ @app = app
13
+ @retry_count = retry_count
14
+ end
15
+
16
+ def call(req, res)
17
+ retry_count=0
18
+ begin
19
+ ::Sequel::DATABASES.first.transaction do
20
+ @app.call(req, res)
21
+ res.response(ret) unless res.responded?
22
+ end
23
+ rescue ::Sequel::DatabaseError, ::Sequel::DatabaseConnectionError => e
24
+ retry_count += 1
25
+ if retry_count < @retry_count
26
+ logger.error("Database Error: #{e.message} retrying #{retry_count}/#{@retry_count}")
27
+ retry
28
+ end
29
+
30
+ res.response(e) unless res.responded?
31
+ raise e
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  module Isono
4
- VERSION='0.2.12'
4
+ VERSION='0.2.13'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isono
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-05 00:00:00.000000000 Z
13
+ date: 2012-08-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: amqp
@@ -154,6 +154,7 @@ files:
154
154
  - lib/isono/rack/map.rb
155
155
  - lib/isono/rack/object_method.rb
156
156
  - lib/isono/rack/proc.rb
157
+ - lib/isono/rack/sequel.rb
157
158
  - lib/isono/rack/thread_pass.rb
158
159
  - lib/isono/resource_manifest.rb
159
160
  - lib/isono/runner/base.rb