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.
- data/lib/nanite.rb +1 -1
- data/lib/nanite/cluster.rb +5 -1
- data/lib/nanite/mapper.rb +25 -15
- data/lib/nanite/security/signature.rb +1 -1
- data/lib/nanite/serializer.rb +31 -18
- metadata +2 -2
data/lib/nanite.rb
CHANGED
@@ -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.
|
43
|
+
VERSION = '0.4.1.15' unless defined?(Nanite::VERSION)
|
44
44
|
|
45
45
|
class MapperNotRunning < StandardError; end
|
46
46
|
|
data/lib/nanite/cluster.rb
CHANGED
@@ -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)
|
data/lib/nanite/mapper.rb
CHANGED
@@ -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
|
-
|
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
|
191
|
+
elsif offline_failsafe?(opts)
|
199
192
|
job_warden.new_job(request, [], intm_handler, blk)
|
200
|
-
cluster.publish(request,
|
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
|
238
|
-
cluster.publish(push,
|
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(
|
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
|
|
data/lib/nanite/serializer.rb
CHANGED
@@ -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 =
|
15
|
-
preferred_format
|
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
|
-
|
36
|
-
|
37
|
-
def cascade_serializers(action, packet)
|
38
|
+
def cascade_serializers(action, packet, format)
|
38
39
|
errors = []
|
39
|
-
|
40
|
+
determine_serializers(format).map do |serializer|
|
40
41
|
begin
|
41
|
-
|
42
|
+
serialized = serializer.send(action, packet)
|
42
43
|
rescue Exception => e
|
43
|
-
|
44
|
+
serialized = nil
|
44
45
|
errors << "#{e.message}\n\t#{e.backtrace[0]}"
|
45
46
|
end
|
46
|
-
return
|
47
|
+
return serialized if serialized
|
47
48
|
end
|
48
49
|
raise SerializationError.new(action, packet, @serializers, errors.join("\n"))
|
49
50
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
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.
|
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-
|
12
|
+
date: 2010-02-10 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|