It's a little bit confusing but I guess it makes sense, I added superclass method to Struct:
```ruby
def superclass
  self.class
end
```

so klass <= Base always returns false.

Regarding `pool_from_any_process_for(owner)` I did a little experiment.
I created a simple rails app, installed active_record_shards and unicorn. 
I started it with one master and one worker process. A master process has connection only to not-sharded DB ("development"), therefore if I remove a not-sharded connection from worker process I expect it to be recovered from master, but, on the other hand, if I remove a shared connection I expect to see ActiveRecord::ConnectionNotEstablished to be raised. (master doesn't have not-sharded connection)

```erb
<% ActiveRecord::Base.connection_handler.instance_variable_get("@owner_to_pool").keys.each do |key| %>
  <p>
  <%= "#{key}:" %>
  <%= ActiveRecord::Base.connection_handler.instance_variable_get("@owner_to_pool")[key].keys %>
  </p>
<% end %>
```
produces below output:
```ruby
27481: ["development"] # master
27482: ["development", "development_shard_1"] # worker[0]
```

and this is how controller looks like (Account - not sharded, User - sharded):
```ruby
class ProcessesController < ApplicationController
  def remove_not_sharded_connection
    ActiveRecord::Base.connection_handler.remove_connection("development")

     # "development" connection is retrieved from master process so no exception is raised
    render :text => Account.all.map(&:name)
  end

  def remove_sharded_connection
    ActiveRecord::Base.on_first_shard do
      ActiveRecord::Base.connection_handler.remove_connection("development_shard_1")

      # it raises ActiveRecord::ConnectionNotEstablished
      render :text => User.all.map(&:name) 
    end
  end
end
```

Ref: https://github.com/lukkry/active_record_shards_test/blob/master/app/controllers/processes_controller.rb

@osheroff does it make sense to you?