diff --git a/lib/router/router.rb b/lib/router/router.rb index 7054be9..db10fca 100644 --- a/lib/router/router.rb +++ b/lib/router/router.rb @@ -171,6 +171,8 @@ def lookup_droplet(url) def register_droplet(url, host, port, tags, app_id) return unless host && port url.downcase! + tags ||= {} + droplets = @droplets[url] || [] # Skip the ones we already know about.. droplets.each { |droplet| @@ -180,7 +182,7 @@ def register_droplet(url, host, port, tags, app_id) return end } - tags.delete_if { |key, value| key.nil? || value.nil? } if tags + tags.delete_if { |key, value| key.nil? || value.nil? } droplet = { :app => app_id, :host => host, @@ -191,7 +193,7 @@ def register_droplet(url, host, port, tags, app_id) :requests => 0, :tags => tags } - add_tag_metrics(tags) if tags + add_tag_metrics(tags) droplets << droplet @droplets[url] = droplets VCAP::Component.varz[:urls] = @droplets.size diff --git a/lib/router/router_uls_server.rb b/lib/router/router_uls_server.rb index aca9b99..cd53404 100644 --- a/lib/router/router_uls_server.rb +++ b/lib/router/router_uls_server.rb @@ -50,7 +50,7 @@ class ParserError < StandardError; end # Get session cookie for droplet new_sticky = Router.get_session_cookie(droplet) - uls_req_tags = Base64.encode64(Marshal.dump(droplet[:tags])).strip if droplet[:tags] + uls_req_tags = Base64.encode64(Marshal.dump(droplet[:tags])).strip uls_response = { ULS_STICKY_SESSION => new_sticky, ULS_BACKEND_ADDR => "#{droplet[:host]}:#{droplet[:port]}", diff --git a/spec/unit/router_spec.rb b/spec/unit/router_spec.rb index 14179f2..20071fd 100644 --- a/spec/unit/router_spec.rb +++ b/spec/unit/router_spec.rb @@ -36,6 +36,17 @@ def setup VCAP::Component.varz[:urls].should == 1 end + it 'should register a droplet with nil tags' do + Router.register_droplet('foo.vcap.me', '10.0.1.22', 2222, nil, 123) + VCAP::Component.varz[:droplets].should == 1 + VCAP::Component.varz[:urls].should == 1 + + droplets = Router.lookup_droplet('foo.vcap.me') + droplet = droplets.first + droplet.should have_key :tags + droplet[:tags].should == {} + end + it 'should allow proper lookup' do Router.register_droplet('foo.vcap.me', '10.0.1.22', 2222, {}, 123) droplets = Router.lookup_droplet('foo.vcap.me') @@ -49,11 +60,13 @@ def setup droplet.should have_key :host droplet.should have_key :port droplet.should have_key :clients + droplet.should have_key :tags droplet[:requests].should == 0 droplet[:url].should == 'foo.vcap.me' droplet[:host].should == '10.0.1.22' droplet[:port].should == 2222 droplet[:clients].should == {} + droplet[:tags].should == {} end it 'should allow looking up uppercase uri' do