Created
November 7, 2015 11:38
-
-
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 file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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