right_agent 0.17.0 → 0.17.2
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/right_agent/history.rb +3 -2
- data/lib/right_agent/operation_result.rb +14 -7
- data/lib/right_agent/sender.rb +1 -1
- data/lib/right_agent/serialize/serializable.rb +11 -0
- data/right_agent.gemspec +2 -2
- data/spec/operation_result_spec.rb +17 -1
- data/spec/sender_spec.rb +2 -5
- metadata +58 -16
data/lib/right_agent/history.rb
CHANGED
@@ -31,8 +31,9 @@ module RightScale
|
|
31
31
|
#
|
32
32
|
# === Parameters
|
33
33
|
# identity(String):: Serialized agent identity
|
34
|
-
|
35
|
-
|
34
|
+
# pid(Integer):: Process ID of agent, defaults to ID if current process
|
35
|
+
def initialize(identity, pid = nil)
|
36
|
+
@pid = pid || Process.pid
|
36
37
|
@history = File.join(AgentConfig.pid_dir, identity + ".history")
|
37
38
|
end
|
38
39
|
|
@@ -99,29 +99,36 @@ module RightScale
|
|
99
99
|
e
|
100
100
|
end
|
101
101
|
|
102
|
-
# Instantiate from request
|
103
|
-
# Ignore all but first result if
|
102
|
+
# Instantiate from request result
|
103
|
+
# Ignore all but first result if result is a hash
|
104
104
|
#
|
105
105
|
# === Parameters
|
106
|
-
#
|
106
|
+
# result(Result|Hash|OperationResult|nil):: Result or the Result "results" field
|
107
107
|
#
|
108
108
|
# === Return
|
109
109
|
# (RightScale::OperationResult):: Converted operation result
|
110
|
-
def self.from_results(
|
111
|
-
r =
|
110
|
+
def self.from_results(result)
|
111
|
+
r = result.is_a?(Result) ? result.results : result
|
112
112
|
if r && r.respond_to?(:status_code) && r.respond_to?(:content)
|
113
113
|
new(r.status_code, r.content)
|
114
|
-
elsif r && r.
|
114
|
+
elsif r && r.is_a?(Hash) && r.values.size > 0
|
115
115
|
r = r.values[0]
|
116
116
|
if r.respond_to?(:status_code) && r.respond_to?(:content)
|
117
117
|
new(r.status_code, r.content)
|
118
118
|
else
|
119
119
|
error("Invalid operation result content: #{r.inspect}")
|
120
120
|
end
|
121
|
+
elsif r && r.is_a?(String)
|
122
|
+
# This is not a supported return value but older RightLink versions can incorrectly
|
123
|
+
# return a String rather than an OperationResult#error in situations where the actor
|
124
|
+
# raises an exception when processing a request
|
125
|
+
error(r)
|
121
126
|
elsif r.nil?
|
122
127
|
error("No results")
|
128
|
+
elsif result.is_a?(Result)
|
129
|
+
error("Invalid results in Result from #{result.from}: #{result.results.inspect}")
|
123
130
|
else
|
124
|
-
error("Invalid operation result type: #{
|
131
|
+
error("Invalid operation result type: #{result.inspect}")
|
125
132
|
end
|
126
133
|
end
|
127
134
|
|
data/lib/right_agent/sender.rb
CHANGED
@@ -919,7 +919,7 @@ module RightScale
|
|
919
919
|
|
920
920
|
if handler = @pending_requests[token]
|
921
921
|
if result && result.non_delivery? && handler.kind == :send_retryable_request
|
922
|
-
if
|
922
|
+
if result.content == OperationResult::TARGET_NOT_CONNECTED
|
923
923
|
# Log and temporarily ignore so that timeout retry mechanism continues, but save reason for use below if timeout
|
924
924
|
# Leave purging of associated request until final response, i.e., success response or retry timeout
|
925
925
|
if parent = handler.retry_parent
|
@@ -26,7 +26,18 @@ module RightScale
|
|
26
26
|
# MessagePack and JSON serializable types that are sent to and from agents
|
27
27
|
module Serializable
|
28
28
|
|
29
|
+
@check_active_support = true
|
30
|
+
|
29
31
|
def self.included(base)
|
32
|
+
if @check_active_support
|
33
|
+
if require_succeeds?("active_support") && (v = Gem.loaded_specs['activesupport'].version.to_s) != "2.3.5"
|
34
|
+
raise Exception.new("Some versions of the activesupport gem modify json in ways that are incompatible with this " +
|
35
|
+
"RightScale::Serializable module. Version #{v} used here is not allowed, use 2.3.5 instead.")
|
36
|
+
else
|
37
|
+
@check_active_support = false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
30
41
|
base.extend ClassMethods
|
31
42
|
base.send(:include, InstanceMethods)
|
32
43
|
end
|
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.17.
|
28
|
-
spec.date = '2013-
|
27
|
+
spec.version = '0.17.2'
|
28
|
+
spec.date = '2013-10-28'
|
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'
|
@@ -57,13 +57,29 @@ describe RightScale::OperationResult do
|
|
57
57
|
result.content.should == "Error"
|
58
58
|
end
|
59
59
|
|
60
|
-
it "should
|
60
|
+
it "should convert unexpected string result into an error result" do
|
61
61
|
result = RightScale::OperationResult.from_results(nil)
|
62
62
|
result.kind_of?(RightScale::OperationResult).should be_true
|
63
63
|
result.status_code.should == RightScale::OperationResult::ERROR
|
64
64
|
result.content.should == "No results"
|
65
65
|
end
|
66
66
|
|
67
|
+
it "should return error OperationResult if results is nil" do
|
68
|
+
string_result = RightScale::Result.new("token", "to", "Unexpected exception", "from")
|
69
|
+
result = RightScale::OperationResult.from_results(string_result)
|
70
|
+
result.kind_of?(RightScale::OperationResult).should be_true
|
71
|
+
result.status_code.should == RightScale::OperationResult::ERROR
|
72
|
+
result.content.should == "Unexpected exception"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return error OperationResult including Result results if the results value is not recognized" do
|
76
|
+
array_result = RightScale::Result.new("token", "to", ["some data"], "from")
|
77
|
+
result = RightScale::OperationResult.from_results(array_result)
|
78
|
+
result.kind_of?(RightScale::OperationResult).should be_true
|
79
|
+
result.status_code.should == RightScale::OperationResult::ERROR
|
80
|
+
result.content.should == 'Invalid results in Result from from: ["some data"]'
|
81
|
+
end
|
82
|
+
|
67
83
|
it "should return error OperationResult if the results value is not recognized" do
|
68
84
|
result = RightScale::OperationResult.from_results(0)
|
69
85
|
result.kind_of?(RightScale::OperationResult).should be_true
|
data/spec/sender_spec.rb
CHANGED
@@ -815,7 +815,7 @@ describe RightScale::Sender do
|
|
815
815
|
end
|
816
816
|
@instance.pending_requests.empty?.should be_false
|
817
817
|
token = @instance.pending_requests.keys.last
|
818
|
-
non_delivery = RightScale::OperationResult.non_delivery(RightScale::OperationResult::
|
818
|
+
non_delivery = RightScale::OperationResult.non_delivery(RightScale::OperationResult::TARGET_NOT_CONNECTED)
|
819
819
|
@instance.handle_response(RightScale::Result.new(token, 'iZac', non_delivery, "from"))
|
820
820
|
EM.add_timer(1) do
|
821
821
|
EM.stop
|
@@ -990,15 +990,12 @@ describe RightScale::Sender do
|
|
990
990
|
@instance.handle_response(response)
|
991
991
|
end
|
992
992
|
|
993
|
-
it "should not deliver TARGET_NOT_CONNECTED
|
993
|
+
it "should not deliver TARGET_NOT_CONNECTED response for send_retryable_request" do
|
994
994
|
@instance.send_retryable_request('/welcome/aboard', 'iZac') {|_|}
|
995
995
|
flexmock(@instance).should_receive(:deliver).never
|
996
996
|
non_delivery = RightScale::OperationResult.non_delivery(RightScale::OperationResult::TARGET_NOT_CONNECTED)
|
997
997
|
response = RightScale::Result.new('token1', 'to', non_delivery, 'target1')
|
998
998
|
@instance.handle_response(response)
|
999
|
-
non_delivery = RightScale::OperationResult.non_delivery(RightScale::OperationResult::TTL_EXPIRATION)
|
1000
|
-
response = RightScale::Result.new('token1', 'to', non_delivery, 'target1')
|
1001
|
-
@instance.handle_response(response)
|
1002
999
|
end
|
1003
1000
|
|
1004
1001
|
it "should record non-delivery regardless of whether there is a response handler" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-10-28 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: right_support
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -26,10 +26,18 @@ dependencies:
|
|
26
26
|
version: '3.0'
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
|
-
version_requirements:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.4.1
|
35
|
+
- - <
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.0'
|
30
38
|
- !ruby/object:Gem::Dependency
|
31
39
|
name: right_amqp
|
32
|
-
requirement:
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
33
41
|
none: false
|
34
42
|
requirements:
|
35
43
|
- - ~>
|
@@ -37,10 +45,15 @@ dependencies:
|
|
37
45
|
version: '0.7'
|
38
46
|
type: :runtime
|
39
47
|
prerelease: false
|
40
|
-
version_requirements:
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.7'
|
41
54
|
- !ruby/object:Gem::Dependency
|
42
55
|
name: json
|
43
|
-
requirement:
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
44
57
|
none: false
|
45
58
|
requirements:
|
46
59
|
- - ! '>='
|
@@ -51,10 +64,18 @@ dependencies:
|
|
51
64
|
version: 1.7.6
|
52
65
|
type: :runtime
|
53
66
|
prerelease: false
|
54
|
-
version_requirements:
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.4'
|
73
|
+
- - <=
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.7.6
|
55
76
|
- !ruby/object:Gem::Dependency
|
56
77
|
name: eventmachine
|
57
|
-
requirement:
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
58
79
|
none: false
|
59
80
|
requirements:
|
60
81
|
- - ! '>='
|
@@ -65,10 +86,18 @@ dependencies:
|
|
65
86
|
version: '2.0'
|
66
87
|
type: :runtime
|
67
88
|
prerelease: false
|
68
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 0.12.10
|
95
|
+
- - <
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '2.0'
|
69
98
|
- !ruby/object:Gem::Dependency
|
70
99
|
name: msgpack
|
71
|
-
requirement:
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
72
101
|
none: false
|
73
102
|
requirements:
|
74
103
|
- - ! '>='
|
@@ -79,10 +108,18 @@ dependencies:
|
|
79
108
|
version: '0.6'
|
80
109
|
type: :runtime
|
81
110
|
prerelease: false
|
82
|
-
version_requirements:
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.4.4
|
117
|
+
- - <
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.6'
|
83
120
|
- !ruby/object:Gem::Dependency
|
84
121
|
name: net-ssh
|
85
|
-
requirement:
|
122
|
+
requirement: !ruby/object:Gem::Requirement
|
86
123
|
none: false
|
87
124
|
requirements:
|
88
125
|
- - ~>
|
@@ -90,7 +127,12 @@ dependencies:
|
|
90
127
|
version: '2.0'
|
91
128
|
type: :runtime
|
92
129
|
prerelease: false
|
93
|
-
version_requirements:
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ~>
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '2.0'
|
94
136
|
description: ! 'RightAgent provides a foundation for running an agent on a server
|
95
137
|
to interface
|
96
138
|
|
@@ -289,10 +331,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
289
331
|
version: '0'
|
290
332
|
segments:
|
291
333
|
- 0
|
292
|
-
hash:
|
334
|
+
hash: 435154341923902142
|
293
335
|
requirements: []
|
294
336
|
rubyforge_project:
|
295
|
-
rubygems_version: 1.8.
|
337
|
+
rubygems_version: 1.8.26
|
296
338
|
signing_key:
|
297
339
|
specification_version: 3
|
298
340
|
summary: Agent for interfacing server with RightScale system
|