right_agent 0.10.12 → 0.10.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.
@@ -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