right_agent 0.9.4 → 0.9.5

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.
@@ -174,6 +174,8 @@ module RightScale
174
174
  Log.init(@identity, @options[:log_path], :print => true)
175
175
  Log.level = @options[:log_level] if @options[:log_level]
176
176
  RightSupport::Log::Mixin.default_logger = Log
177
+ now = Time.now
178
+ Log.info("[start] Agent #{@identity} starting; time: #{now.utc}; utc_offset: #{now.utc_offset}")
177
179
  Log.debug("Start options:")
178
180
  log_opts = @options.inject([]){ |t, (k, v)| t << "- #{k}: #{v}" }
179
181
  log_opts.each { |l| Log.debug(l) }
@@ -343,7 +345,7 @@ module RightScale
343
345
  end
344
346
  end
345
347
  rescue Exception => e
346
- res = Log.format("Failed to connect to broker #{RightAMQP::HABrokerClient.identity(host, port)}", e)
348
+ res = Log.format("Failed to connect to broker at host #{host.inspect} and port #{port.inspect}", e)
347
349
  @exceptions.track("connect", e)
348
350
  end
349
351
  Log.error(res) if res
@@ -23,6 +23,7 @@
23
23
  require 'rubygems'
24
24
  require 'eventmachine'
25
25
  require 'fileutils'
26
+ require 'yaml'
26
27
 
27
28
  # load definition for File.normalize_path, etc.
28
29
  require File.expand_path(File.join(File.dirname(__FILE__), 'platform'))
@@ -79,7 +79,7 @@ module RightScale
79
79
 
80
80
  # Directory containing generated agent configuration files
81
81
  def right_agent_cfg_dir
82
- '/etc/right_agent'
82
+ '/var/lib/rightscale/right_agent'
83
83
  end
84
84
 
85
85
  # Static (time-invariant) state that is common to all RightScale apps/agents
@@ -444,23 +444,26 @@ module RightScale
444
444
  # true:: Always return true
445
445
  def check(id = nil, max_ping_timeouts = MAX_PING_TIMEOUTS)
446
446
  unless @terminating || @ping_timer || (id && !@sender.broker.connected?(id))
447
+ @ping_id = id
447
448
  @ping_timer = EM::Timer.new(PING_TIMEOUT) do
448
- begin
449
- @ping_stats.update("timeout")
450
- @ping_timer = nil
451
- @ping_timeouts[id] = (@ping_timeouts[id] || 0) + 1
452
- if @ping_timeouts[id] >= max_ping_timeouts
453
- Log.error("Mapper ping via broker #{id} timed out after #{PING_TIMEOUT} seconds and now " +
454
- "reached maximum of #{max_ping_timeouts} timeout#{max_ping_timeouts > 1 ? 's' : ''}, " +
455
- "attempting to reconnect")
456
- host, port, index, priority = @sender.broker.identity_parts(id)
457
- @sender.agent.connect(host, port, index, priority, force = true)
458
- else
459
- Log.warning("Mapper ping via broker #{id} timed out after #{PING_TIMEOUT} seconds")
449
+ if @ping_id
450
+ begin
451
+ @ping_stats.update("timeout")
452
+ @ping_timer = nil
453
+ @ping_timeouts[@ping_id] = (@ping_timeouts[@ping_id] || 0) + 1
454
+ if @ping_timeouts[@ping_id] >= max_ping_timeouts
455
+ Log.error("Mapper ping via broker #{@ping_id} timed out after #{PING_TIMEOUT} seconds and now " +
456
+ "reached maximum of #{max_ping_timeouts} timeout#{max_ping_timeouts > 1 ? 's' : ''}, " +
457
+ "attempting to reconnect")
458
+ host, port, index, priority = @sender.broker.identity_parts(@ping_id)
459
+ @sender.agent.connect(host, port, index, priority, force = true)
460
+ else
461
+ Log.warning("Mapper ping via broker #{@ping_id} timed out after #{PING_TIMEOUT} seconds")
462
+ end
463
+ rescue Exception => e
464
+ Log.error("Failed to reconnect to broker #{@ping_id}", e, :trace)
465
+ @exception_stats.track("ping timeout", e)
460
466
  end
461
- rescue Exception => e
462
- Log.error("Failed to reconnect to broker #{id}", e, :trace)
463
- @exception_stats.track("ping timeout", e)
464
467
  end
465
468
  end
466
469
 
@@ -470,7 +473,8 @@ module RightScale
470
473
  @ping_stats.update("success")
471
474
  @ping_timer.cancel
472
475
  @ping_timer = nil
473
- @ping_timeouts[id] = 0
476
+ @ping_timeouts[@ping_id] = 0
477
+ @ping_id = nil
474
478
  end
475
479
  rescue Exception => e
476
480
  Log.error("Failed to cancel mapper ping", e, :trace)
@@ -479,8 +483,8 @@ module RightScale
479
483
  end
480
484
  request = Request.new("/mapper/ping", nil, {:from => @sender.identity, :token => AgentIdentity.generate})
481
485
  @sender.pending_requests[request.token] = PendingRequest.new(:send_persistent_request, Time.now, handler)
482
- ids = [id] if id
483
- id = @sender.publish(request, ids).first
486
+ ids = [@ping_id] if @ping_id
487
+ @ping_id = @sender.publish(request, ids).first
484
488
  end
485
489
  true
486
490
  end
data/lib/right_agent.rb CHANGED
@@ -24,7 +24,6 @@
24
24
  require File.expand_path(File.join(File.dirname(__FILE__), 'right_agent', 'minimal'))
25
25
 
26
26
  require 'json'
27
- require 'yaml'
28
27
  require 'openssl'
29
28
  require 'right_amqp'
30
29
  require 'right_support'
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.9.4'
28
- spec.date = '2012-03-14'
27
+ spec.version = '0.9.5'
28
+ spec.date = '2012-03-17'
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/agent_spec.rb CHANGED
@@ -441,6 +441,7 @@ describe RightScale::Agent do
441
441
 
442
442
  it "should tune heartbeat for all broker connections" do
443
443
  run_in_em do
444
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
444
445
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 45/).once
445
446
  @log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker/).twice
446
447
  @agent = RightScale::Agent.new(:user => "me", :identity => @identity)
@@ -458,6 +459,7 @@ describe RightScale::Agent do
458
459
 
459
460
  it "should tune heartbeat for all broker connections as deferred task" do
460
461
  run_in_em do
462
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
461
463
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 45/).once
462
464
  @log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker/).twice
463
465
  @agent = RightScale::Agent.new(:user => "me", :identity => @identity)
@@ -478,6 +480,7 @@ describe RightScale::Agent do
478
480
 
479
481
  it "should disable heartbeat for all broker connections" do
480
482
  run_in_em do
483
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
481
484
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 0/).once
482
485
  @log.should_receive(:info).with(/Disabled heartbeat for broker/).twice
483
486
  @agent = RightScale::Agent.new(:user => "me", :identity => @identity)
@@ -495,6 +498,7 @@ describe RightScale::Agent do
495
498
 
496
499
  it "should log error if any broker connect attempts fail" do
497
500
  run_in_em do
501
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
498
502
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 45/).once
499
503
  @log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
500
504
  @log.should_receive(:error).with("Failed to reconnect to broker #{@broker_id} to tune heartbeat", Exception, :trace).once
@@ -513,6 +517,7 @@ describe RightScale::Agent do
513
517
 
514
518
  it "should log error if any brokers do not connect" do
515
519
  run_in_em do
520
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
516
521
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 45/).once
517
522
  @log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
518
523
  @log.should_receive(:error).with(/Failed to reconnect to broker #{@broker_id} to tune heartbeat, status/).once
@@ -533,6 +538,7 @@ describe RightScale::Agent do
533
538
 
534
539
  it "should log error if any broker queue setup fails" do
535
540
  run_in_em do
541
+ @log.should_receive(:info).with(/\[start\] Agent #{@identity} starting; time: .*$/).once
536
542
  @log.should_receive(:info).with(/Reconnecting each broker to tune heartbeat to 45/).once
537
543
  @log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
538
544
  @log.should_receive(:error).with(/Failed to setup queues for broker #{@broker_id} when tuning heartbeat/, Exception, :trace).once
data/spec/sender_spec.rb CHANGED
@@ -133,6 +133,23 @@ describe RightScale::Sender do
133
133
  instance.connectivity_checker.check(broker_id)
134
134
  end
135
135
 
136
+ it "should ignore ping timeout if never successfully publish ping" do
137
+ @agent.should_receive(:options).and_return(:ping_interval => 1000)
138
+ old_ping_timeout = RightScale::Sender::ConnectivityChecker::PING_TIMEOUT
139
+ begin
140
+ RightScale::Sender::ConnectivityChecker.const_set(:PING_TIMEOUT, 0.5)
141
+ EM.run do
142
+ EM.add_timer(1) { EM.stop }
143
+ RightScale::Sender.new(@agent)
144
+ instance = RightScale::Sender.instance
145
+ flexmock(instance).should_receive(:publish).and_return([]).once
146
+ instance.connectivity_checker.check(id = nil)
147
+ end
148
+ ensure
149
+ RightScale::Sender::ConnectivityChecker.const_set(:PING_TIMEOUT, old_ping_timeout)
150
+ end
151
+ end
152
+
136
153
  it "should ignore messages received if ping disabled" do
137
154
  @agent.should_receive(:options).and_return(:ping_interval => 0)
138
155
  flexmock(EM::Timer).should_receive(:new).never
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_agent
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 4
10
- version: 0.9.4
9
+ - 5
10
+ version: 0.9.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lee Kirchhoff
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-03-14 00:00:00 -07:00
20
+ date: 2012-03-17 00:00:00 -07:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency