module Makara

Convenience methods to grab subconfigs out of the primary configuration. Provides a way to generate a consistent ID based on a unique config. Makara configs should be formatted like so: –

top_level: 'variable'
another: 'top level variable'
makara:
  master_ttl: 3
  blacklist_duration: 20
  connections:
    - role: 'master'
    - role: 'slave'
    - role: 'slave'
      name: 'slave2'

Makara::ConnectionWrapper wraps the instance of an underlying connection. The wrapper provides methods for tracking blacklisting and individual makara configurations. Upon creation, the wrapper defines methods in the underlying object giving it access to the Makara::Proxy.

Keeps track of the current stickiness state for different Makara proxies

Base class to handle errors when invoking an underlying connection from a makara proxy. Each concrete implementation of a MakaraProxy can provide it's own ErrorHandler which should inherit from this class.

Persists the Makara::Context across requests ensuring the same master pool is used on subsequent requests.

Wraps a collection of similar connections and chooses which one to use Provides convenience methods for accessing underlying connections

The entry point of Makara. It contains a master and slave pool which are chosen based on the invocation being proxied. Makara::Proxy implementations should declare which methods they are hijacking via the `hijack_method` class method. While debugging this class use prepend debug calls with Kernel. (Kernel.byebug for example) to avoid getting into method_missing stuff.