right_agent 0.10.12 → 0.10.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -1130,7 +1130,13 @@ module RightScale
1130
1130
  def publish_with_timeout_retry(request, parent, count = 0, multiplier = 1, elapsed = 0, broker_ids = nil)
1131
1131
  published_broker_ids = publish(request, broker_ids)
1132
1132
 
1133
- if @retry_interval && @retry_timeout && parent && !published_broker_ids.empty?
1133
+ if published_broker_ids.empty?
1134
+ # Could not publish request to any brokers, so respond with non-delivery
1135
+ # to allow requester, e.g., IdempotentRequest, to retry
1136
+ result = OperationResult.non_delivery("request send failed")
1137
+ @non_delivery_stats.update(result.content)
1138
+ handle_response(Result.new(request.token, request.reply_to, result, @identity))
1139
+ elsif @retry_interval && @retry_timeout && parent
1134
1140
  interval = [(@retry_interval * multiplier) + (@request_stats.avg_duration || 0), @retry_timeout - elapsed].min
1135
1141
  EM.add_timer(interval) do
1136
1142
  begin
data/right_agent.gemspec CHANGED
@@ -24,8 +24,8 @@ require 'rubygems'
24
24
 
25
25
  Gem::Specification.new do |spec|
26
26
  spec.name = 'right_agent'
27
- spec.version = '0.10.12'
28
- spec.date = '2012-08-27'
27
+ spec.version = '0.10.13'
28
+ spec.date = '2013-02-07'
29
29
  spec.authors = ['Lee Kirchhoff', 'Raphael Simon', 'Tony Spataro']
30
30
  spec.email = 'lee@rightscale.com'
31
31
  spec.homepage = 'https://github.com/rightscale/right_agent'
data/spec/sender_spec.rb CHANGED
@@ -381,6 +381,7 @@ describe RightScale::Sender do
381
381
  @timer = flexmock("timer")
382
382
  flexmock(EM::Timer).should_receive(:new).and_return(@timer).by_default
383
383
  flexmock(EM).should_receive(:next_tick).and_yield.by_default
384
+ flexmock(EM).should_receive(:defer).and_yield.by_default
384
385
  @broker_id = "broker"
385
386
  @broker_ids = [@broker_id]
386
387
  @broker = flexmock("Broker", :subscribe => true, :publish => @broker_ids, :connected? => true,
@@ -414,7 +415,7 @@ describe RightScale::Sender do
414
415
  it "should create a Request object" do
415
416
  @broker.should_receive(:publish).with(hsh(:name => "request"), on do |request|
416
417
  request.class.should == RightScale::Request
417
- end, hsh(:persistent => false, :mandatory => true)).once
418
+ end, hsh(:persistent => false, :mandatory => true)).and_return(["rs-broker-host-123"]).once
418
419
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
419
420
  end
420
421
 
@@ -432,7 +433,7 @@ describe RightScale::Sender do
432
433
  request.from.should == 'agent'
433
434
  request.target.should be_nil
434
435
  request.expires_at.should == 1000100
435
- end, hsh(:persistent => false, :mandatory => true)).once
436
+ end, hsh(:persistent => false, :mandatory => true)).and_return(["rs-broker-host-123"]).once
436
437
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
437
438
  end
438
439
 
@@ -444,14 +445,14 @@ describe RightScale::Sender do
444
445
  flexmock(Time).should_receive(:now).and_return(Time.at(1000000))
445
446
  @broker.should_receive(:publish).with(hsh(:name => "request"), on do |request|
446
447
  request.expires_at.should == 0
447
- end, hsh(:persistent => false, :mandatory => true)).once
448
+ end, hsh(:persistent => false, :mandatory => true)).and_return(["rs-broker-host-123"]).once
448
449
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
449
450
  end
450
451
 
451
452
  it "should set the correct target if specified" do
452
453
  @broker.should_receive(:publish).with(hsh(:name => "request"), on do |request|
453
454
  request.target.should == 'my-target'
454
- end, hsh(:persistent => false, :mandatory => true)).once
455
+ end, hsh(:persistent => false, :mandatory => true)).and_return(["rs-broker-host-123"]).once
455
456
  @instance.send_retryable_request('/welcome/aboard', 'iZac', 'my-target') {|response|}
456
457
  end
457
458
 
@@ -460,7 +461,7 @@ describe RightScale::Sender do
460
461
  request.tags.should == ['tag']
461
462
  request.selector.should == :any
462
463
  request.scope.should == {:account => 123}
463
- end, hsh(:persistent => false, :mandatory => true)).once
464
+ end, hsh(:persistent => false, :mandatory => true)).and_return(["rs-broker-host-123"]).once
464
465
  @instance.send_retryable_request('/welcome/aboard', 'iZac', :tags => ['tag'], :scope => {:account => 123})
465
466
  end
466
467
 
@@ -511,7 +512,7 @@ describe RightScale::Sender do
511
512
  @agent.should_receive(:options).and_return({:retry_timeout => nil})
512
513
  RightScale::Sender.new(@agent)
513
514
  @instance = RightScale::Sender.instance
514
- @broker.should_receive(:publish).once
515
+ @broker.should_receive(:publish).and_return(["rs-broker-host-123"]).once
515
516
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
516
517
  end
517
518
 
@@ -520,7 +521,7 @@ describe RightScale::Sender do
520
521
  @agent.should_receive(:options).and_return({:retry_interval => nil})
521
522
  RightScale::Sender.new(@agent)
522
523
  @instance = RightScale::Sender.instance
523
- @broker.should_receive(:publish).once
524
+ @broker.should_receive(:publish).and_return(["rs-broker-host-123"]).once
524
525
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
525
526
  end
526
527
 
@@ -533,6 +534,20 @@ describe RightScale::Sender do
533
534
  @instance.send_retryable_request('/welcome/aboard', 'iZac') {|response|}
534
535
  end
535
536
 
537
+ it "should respond with non-delivery if publish failed" do
538
+ flexmock(EM).should_receive(:add_timer).never
539
+ @agent.should_receive(:options).and_return({:retry_timeout => 60, :retry_interval => 60})
540
+ RightScale::Sender.new(@agent)
541
+ @instance = RightScale::Sender.instance
542
+ @log.should_receive(:error).with(/Failed to publish request/, RightAMQP::HABrokerClient::NoConnectedBrokers).once
543
+ @broker.should_receive(:publish).and_raise(RightAMQP::HABrokerClient::NoConnectedBrokers).once
544
+ @instance.send_retryable_request('/welcome/aboard', 'iZac') do |response|
545
+ result = RightScale::OperationResult.from_results(response)
546
+ result.non_delivery?.should be_true
547
+ result.content.should == "request send failed"
548
+ end
549
+ end
550
+
536
551
  it "should setup for retry if retry_timeout and retry_interval not nil and publish successful" do
537
552
  flexmock(EM).should_receive(:add_timer).with(60, any).once
538
553
  @agent.should_receive(:options).and_return({:retry_timeout => 60, :retry_interval => 60})
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_agent
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 10
9
- - 12
10
- version: 0.10.12
4
+ prerelease:
5
+ version: 0.10.13
11
6
  platform: ruby
12
7
  authors:
13
8
  - Lee Kirchhoff
@@ -17,124 +12,88 @@ autorequire:
17
12
  bindir: bin
18
13
  cert_chain: []
19
14
 
20
- date: 2012-08-27 00:00:00 -07:00
21
- default_executable:
15
+ date: 2013-02-07 00:00:00 Z
22
16
  dependencies:
23
17
  - !ruby/object:Gem::Dependency
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
18
+ name: right_support
19
+ requirement: &id001 !ruby/object:Gem::Requirement
25
20
  none: false
26
21
  requirements:
27
22
  - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 9
30
- segments:
31
- - 1
32
- - 3
33
24
  version: "1.3"
34
25
  - - <
35
26
  - !ruby/object:Gem::Version
36
- hash: 7
37
- segments:
38
- - 3
39
- - 0
40
27
  version: "3.0"
41
- requirement: *id001
42
- name: right_support
43
- prerelease: false
44
28
  type: :runtime
29
+ prerelease: false
30
+ version_requirements: *id001
45
31
  - !ruby/object:Gem::Dependency
46
- version_requirements: &id002 !ruby/object:Gem::Requirement
32
+ name: right_amqp
33
+ requirement: &id002 !ruby/object:Gem::Requirement
47
34
  none: false
48
35
  requirements:
49
36
  - - ~>
50
37
  - !ruby/object:Gem::Version
51
- hash: 13
52
- segments:
53
- - 0
54
- - 3
55
38
  version: "0.3"
56
- requirement: *id002
57
- name: right_amqp
58
- prerelease: false
59
39
  type: :runtime
40
+ prerelease: false
41
+ version_requirements: *id002
60
42
  - !ruby/object:Gem::Dependency
61
- version_requirements: &id003 !ruby/object:Gem::Requirement
43
+ name: json
44
+ requirement: &id003 !ruby/object:Gem::Requirement
62
45
  none: false
63
46
  requirements:
64
47
  - - ~>
65
48
  - !ruby/object:Gem::Version
66
- hash: 7
67
- segments:
68
- - 1
69
- - 4
70
49
  version: "1.4"
71
- requirement: *id003
72
- name: json
73
- prerelease: false
74
50
  type: :runtime
51
+ prerelease: false
52
+ version_requirements: *id003
75
53
  - !ruby/object:Gem::Dependency
76
- version_requirements: &id004 !ruby/object:Gem::Requirement
54
+ name: eventmachine
55
+ requirement: &id004 !ruby/object:Gem::Requirement
77
56
  none: false
78
57
  requirements:
79
58
  - - ~>
80
59
  - !ruby/object:Gem::Version
81
- hash: 59
82
- segments:
83
- - 0
84
- - 12
85
- - 10
86
60
  version: 0.12.10
87
- requirement: *id004
88
- name: eventmachine
89
- prerelease: false
90
61
  type: :runtime
62
+ prerelease: false
63
+ version_requirements: *id004
91
64
  - !ruby/object:Gem::Dependency
92
- version_requirements: &id005 !ruby/object:Gem::Requirement
65
+ name: right_popen
66
+ requirement: &id005 !ruby/object:Gem::Requirement
93
67
  none: false
94
68
  requirements:
95
69
  - - ~>
96
70
  - !ruby/object:Gem::Version
97
- hash: 1
98
- segments:
99
- - 1
100
- - 0
101
- - 11
102
71
  version: 1.0.11
103
- requirement: *id005
104
- name: right_popen
105
- prerelease: false
106
72
  type: :runtime
73
+ prerelease: false
74
+ version_requirements: *id005
107
75
  - !ruby/object:Gem::Dependency
108
- version_requirements: &id006 !ruby/object:Gem::Requirement
76
+ name: msgpack
77
+ requirement: &id006 !ruby/object:Gem::Requirement
109
78
  none: false
110
79
  requirements:
111
80
  - - "="
112
81
  - !ruby/object:Gem::Version
113
- hash: 7
114
- segments:
115
- - 0
116
- - 4
117
- - 4
118
82
  version: 0.4.4
119
- requirement: *id006
120
- name: msgpack
121
- prerelease: false
122
83
  type: :runtime
84
+ prerelease: false
85
+ version_requirements: *id006
123
86
  - !ruby/object:Gem::Dependency
124
- version_requirements: &id007 !ruby/object:Gem::Requirement
87
+ name: net-ssh
88
+ requirement: &id007 !ruby/object:Gem::Requirement
125
89
  none: false
126
90
  requirements:
127
91
  - - ~>
128
92
  - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
131
- - 2
132
- - 0
133
93
  version: "2.0"
134
- requirement: *id007
135
- name: net-ssh
136
- prerelease: false
137
94
  type: :runtime
95
+ prerelease: false
96
+ version_requirements: *id007
138
97
  description: |
139
98
  RightAgent provides a foundation for running an agent on a server to interface
140
99
  in a secure fashion with other agents in the RightScale system. A RightAgent
@@ -298,7 +257,6 @@ files:
298
257
  - spec/spec.win32.opts
299
258
  - spec/spec_helper.rb
300
259
  - spec/tracer_spec.rb
301
- has_rdoc: true
302
260
  homepage: https://github.com/rightscale/right_agent
303
261
  licenses: []
304
262
 
@@ -315,25 +273,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
315
273
  requirements:
316
274
  - - ">="
317
275
  - !ruby/object:Gem::Version
318
- hash: 57
319
- segments:
320
- - 1
321
- - 8
322
- - 7
323
276
  version: 1.8.7
324
277
  required_rubygems_version: !ruby/object:Gem::Requirement
325
278
  none: false
326
279
  requirements:
327
280
  - - ">="
328
281
  - !ruby/object:Gem::Version
329
- hash: 3
282
+ hash: 2192797536970431426
330
283
  segments:
331
284
  - 0
332
285
  version: "0"
333
286
  requirements: []
334
287
 
335
288
  rubyforge_project:
336
- rubygems_version: 1.3.7
289
+ rubygems_version: 1.8.11
337
290
  signing_key:
338
291
  specification_version: 3
339
292
  summary: Agent for interfacing server with RightScale system