nanite 0.4.1.14 → 0.4.1.15

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.
@@ -40,7 +40,7 @@ require 'nanite/security/static_certificate_store'
40
40
  require 'nanite/serializer'
41
41
 
42
42
  module Nanite
43
- VERSION = '0.4.1.14' unless defined?(Nanite::VERSION)
43
+ VERSION = '0.4.1.15' unless defined?(Nanite::VERSION)
44
44
 
45
45
  class MapperNotRunning < StandardError; end
46
46
 
@@ -67,7 +67,7 @@ module Nanite
67
67
  old_target = request.target
68
68
  request.target = target unless target == 'mapper-offline'
69
69
  Nanite::Log.debug("SEND #{request.to_s([:from, :tags, :target])}")
70
- amq.queue(target).publish(serializer.dump(request), :persistent => request.persistent)
70
+ amq.queue(target).publish(serializer.dump(request, enforce_format?(target)), :persistent => request.persistent)
71
71
  ensure
72
72
  request.target = old_target
73
73
  end
@@ -75,6 +75,10 @@ module Nanite
75
75
 
76
76
  protected
77
77
 
78
+ def enforce_format?(target)
79
+ target == 'mapper-offline' ? :insecure : nil
80
+ end
81
+
78
82
  # updates nanite information (last ping timestamps, status)
79
83
  # when heartbeat message is received
80
84
  def handle_ping(ping)
@@ -121,20 +121,13 @@ module Nanite
121
121
  @options[:log_path] = (@options[:log_dir] || @options[:root] || Dir.pwd)
122
122
  end
123
123
  @options.freeze
124
+ @offline_queue = 'mapper-offline'
124
125
  end
125
126
 
126
127
  def run
127
128
  setup_logging
128
129
  @serializer = Serializer.new(@options[:format])
129
- pid_file = PidFile.new(@identity, @options)
130
- pid_file.check
131
- if @options[:daemonize]
132
- daemonize(@identity, @options)
133
- pid_file.write
134
- at_exit { pid_file.remove }
135
- else
136
- trap("INT") {exit}
137
- end
130
+ setup_process
138
131
  @amq = start_amqp(@options)
139
132
  @job_warden = JobWarden.new(@serializer)
140
133
  setup_cluster
@@ -195,9 +188,9 @@ module Nanite
195
188
  job = job_warden.new_job(request, targets, intm_handler, blk)
196
189
  cluster.route(request, job.targets)
197
190
  job
198
- elsif opts.key?(:offline_failsafe) ? opts[:offline_failsafe] : options[:offline_failsafe]
191
+ elsif offline_failsafe?(opts)
199
192
  job_warden.new_job(request, [], intm_handler, blk)
200
- cluster.publish(request, 'mapper-offline')
193
+ cluster.publish(request, @offline_queue)
201
194
  :offline
202
195
  else
203
196
  false
@@ -234,14 +227,18 @@ module Nanite
234
227
  if !targets.empty?
235
228
  cluster.route(push, targets)
236
229
  true
237
- elsif opts.key?(:offline_failsafe) ? opts[:offline_failsafe] : options[:offline_failsafe]
238
- cluster.publish(push, 'mapper-offline')
230
+ elsif offline_failsafe?(opts)
231
+ cluster.publish(push, @offline_queue)
239
232
  :offline
240
233
  else
241
234
  false
242
235
  end
243
236
  end
244
237
 
238
+ def offline_failsafe?(opts)
239
+ opts.key?(:offline_failsafe) ? opts[:offline_failsafe] : options[:offline_failsafe]
240
+ end
241
+
245
242
  private
246
243
 
247
244
  def build_deliverable(deliverable_type, type, payload, opts)
@@ -262,11 +259,12 @@ module Nanite
262
259
  end
263
260
 
264
261
  def setup_offline_queue
265
- offline_queue = amq.queue('mapper-offline', :durable => true)
262
+ offline_queue = amq.queue(@offline_queue, :durable => true)
266
263
  offline_queue.subscribe(:ack => true) do |info, deliverable|
267
- deliverable = serializer.load(deliverable)
264
+ deliverable = serializer.load(deliverable, :insecure)
268
265
  targets = cluster.targets_for(deliverable)
269
266
  unless targets.empty?
267
+ Nanite::Log.debug("Recovering message from offline queue: #{deliverable.to_s([:from, :tags, :target])}")
270
268
  info.ack
271
269
  if deliverable.kind_of?(Request)
272
270
  if job = job_warden.jobs[deliverable.token]
@@ -303,6 +301,18 @@ module Nanite
303
301
  def setup_cluster
304
302
  @cluster = Cluster.new(@amq, @options[:agent_timeout], @options[:identity], @serializer, self, @options[:redis], @options[:callbacks])
305
303
  end
304
+
305
+ def setup_process
306
+ pid_file = PidFile.new(@identity, @options)
307
+ pid_file.check
308
+ if @options[:daemonize]
309
+ daemonize(@identity, @options)
310
+ pid_file.write
311
+ at_exit { pid_file.remove }
312
+ else
313
+ trap("INT") {exit}
314
+ end
315
+ end
306
316
  end
307
317
  end
308
318
 
@@ -1,4 +1,4 @@
1
- if defined?(OpenSSL::PKCS7::PKCS7)
1
+ if RUBY_VERSION < '1.8.7'
2
2
  Nanite::PKCS7 = OpenSSL::PKCS7::PKCS7
3
3
  else
4
4
  Nanite::PKCS7 = OpenSSL::PKCS7
@@ -1,6 +1,9 @@
1
1
  module Nanite
2
2
  class Serializer
3
+ SERIALIZERS = {:json => JSON, :marshal => Marshal, :yaml => YAML}.freeze
3
4
 
5
+ attr_reader :preferred_format
6
+
4
7
  class SerializationError < StandardError
5
8
  attr_accessor :action, :packet
6
9
  def initialize(action, packet, serializers, msg = nil)
@@ -11,42 +14,52 @@ module Nanite
11
14
  end # SerializationError
12
15
 
13
16
  # The secure serializer should not be part of the cascading
14
- def initialize(preferred_format = :marshal)
15
- preferred_format ||= :marshal
16
- if preferred_format.to_s == 'secure'
17
+ def initialize(preferred_format = nil)
18
+ @preferred_format = preferred_format || :marshal
19
+ if @preferred_format.to_s == 'secure'
17
20
  @serializers = [ SecureSerializer ]
18
21
  else
19
- preferred_serializer = SERIALIZERS[preferred_format.to_sym]
22
+ preferred_serializer = SERIALIZERS[@preferred_format.to_sym]
20
23
  @serializers = SERIALIZERS.values.clone
21
24
  @serializers.unshift(@serializers.delete(preferred_serializer)) if preferred_serializer
22
25
  end
23
26
  end
24
27
 
25
- def dump(packet)
26
- cascade_serializers(:dump, packet)
28
+ def dump(packet, format = nil)
29
+ cascade_serializers(:dump, packet, format)
27
30
  end
28
31
 
29
- def load(packet)
30
- cascade_serializers(:load, packet)
32
+ def load(packet, format = nil)
33
+ cascade_serializers(:load, packet, format)
31
34
  end
32
35
 
33
36
  private
34
37
 
35
- SERIALIZERS = {:json => JSON, :marshal => Marshal, :yaml => YAML}.freeze
36
-
37
- def cascade_serializers(action, packet)
38
+ def cascade_serializers(action, packet, format)
38
39
  errors = []
39
- @serializers.map do |serializer|
40
+ determine_serializers(format).map do |serializer|
40
41
  begin
41
- o = serializer.send(action, packet)
42
+ serialized = serializer.send(action, packet)
42
43
  rescue Exception => e
43
- o = nil
44
+ serialized = nil
44
45
  errors << "#{e.message}\n\t#{e.backtrace[0]}"
45
46
  end
46
- return o if o
47
+ return serialized if serialized
47
48
  end
48
49
  raise SerializationError.new(action, packet, @serializers, errors.join("\n"))
49
50
  end
50
-
51
- end # Serializer
52
- end # Nanite
51
+
52
+ def determine_serializers(format)
53
+ if secure_serialization? and format == :insecure
54
+ SERIALIZERS.values
55
+ else
56
+ @serializers
57
+ end
58
+ end
59
+
60
+ def secure_serialization?
61
+ @preferred_format.to_s == 'secure'
62
+ end
63
+
64
+ end
65
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1.14
4
+ version: 0.4.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-08 00:00:00 +01:00
12
+ date: 2010-02-10 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency