Sha256: fb965780a4af4c65ea2f7c0ab48c714da0ddabf7146ce36fb5f9f698fdc6d4eb

Contents?: true

Size: 872 Bytes

Versions: 8

Compression:

Stored size: 872 Bytes

Contents

require 'redis-namespace'
require 'redis/distributed'
require 'uri'
require 'singleton'

module Routemaster
  class RedisBroker
    include Singleton

    def initialize
      @_connections = {}
      _cleanup
    end

    def get(name, urls: [])
      _check_for_fork
      @_connections[name] ||= begin
                                parsed_url = URI.parse(urls.first)
                                namespace = parsed_url.path.split('/')[2] || 'rm'
                                Redis::Namespace.new(namespace, redis: Redis::Distributed.new(urls))
                              end
    end

    def cleanup
      _cleanup
    end

    private

    def _check_for_fork
      _cleanup unless Process.pid == @_pid
    end

    def _cleanup
      @_pid = Process.pid
      @_connections.each_value.map(&:redis).each(&:quit)
      @_connections = {}
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
routemaster-drain-2.5.2 lib/routemaster/redis_broker.rb
routemaster-drain-2.5.1 lib/routemaster/redis_broker.rb
routemaster-drain-2.5.0 lib/routemaster/redis_broker.rb
routemaster-drain-2.4.4 lib/routemaster/redis_broker.rb
routemaster-drain-2.4.3 lib/routemaster/redis_broker.rb
routemaster-drain-2.4.2 lib/routemaster/redis_broker.rb
routemaster-drain-2.4.1 lib/routemaster/redis_broker.rb
routemaster-drain-2.4.0 lib/routemaster/redis_broker.rb