Skip to content

Instantly share code, notes, and snippets.

@ktimothy
Created November 7, 2015 11:38
Show Gist options
  • Save ktimothy/72307d5efa8eec9c1c7d to your computer and use it in GitHub Desktop.
Save ktimothy/72307d5efa8eec9c1c7d to your computer and use it in GitHub Desktop.
An extension, that allows to log server name in sequel sharded environment. Useful for debugging, when you need to know where exactly your query is executed.
# This extension is useful for sharded environment.
# It logs server name, for which connection is picked from pool.
# Logging happens using Database::log_info method, so be sure to set logger to database.
# The extension simply overrides original pick_server method and logs server name argument.
module Sequel
module LogServerName
def self.extended(db)
pool = db.pool
# check if pool is sharded
if is_sharded? pool
class << pool
# override original method to log server name
def pick_server(server)
@db.log_info "Picking connection for server #{server}"
super
end
end
else
raise "LogServerName extension can only be used with sharded pool!"
end
end
private
def self.is_sharded? pool
is_sharded_threaded?(pool) || is_sharded_single?(pool)
end
def self.is_sharded_threaded? pool
defined?(ShardedThreadedConnectionPool) && pool.is_a?(ShardedThreadedConnectionPool)
end
def self.is_sharded_single? pool
defined?(ShardedSingleConnectionPool) && pool.is_a?(ShardedSingleConnectionPool)
end
end
Database.register_extension(:log_server_name, LogServerName)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment