Sha256: 5449d3071f73d4e6d235ac20e9ee93f69871eb0059c7f2c3c7097b5b9e7cab0f

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module Prefab
  class ConfigClient
    RECONNECT_WAIT = 5

    def initialize(base_client, timeout)
      @base_client = base_client
      @timeout = timeout
      @config_resolver = EzConfig::ConfigResolver.new(base_client)
      boot_resolver
    end

    def get(prop)
      @config_resolver.get(prop)
    end

    def set(config_delta)
      Retry.it method(:stub_with_timout), :upsert, config_delta, @timeout
      @config_resolver.set(config_delta)
    end

    def to_s
      @config_resolver.to_s
    end

    private

    def stub
      Prefab::ConfigService::Stub.new(nil,
                                      nil,
                                      channel_override: @base_client.channel,
                                      interceptors: [@base_client.interceptor])
    end

    def stub_with_timout
      Prefab::ConfigService::Stub.new(nil,
                                      nil,
                                      channel_override: @base_client.channel,
                                      timeout: @timeout,
                                      interceptors: [@base_client.interceptor])
    end

    def boot_resolver
      config_req = Prefab::ConfigServicePointer.new(account_id: @base_client.account_id,
                                                    start_at_id: 0)

      Thread.new do
        while true do
          begin
            resp = stub.get_config(config_req)
            resp.each do |r|
              r.deltas.each do |delta|
                @config_resolver.set(delta, do_update: false)
              end
              @config_resolver.update
            end
          rescue => e
            sleep(RECONNECT_WAIT)
            @base_client.logger.info("config client encountered #{e.message} pausing #{RECONNECT_WAIT}")
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
prefab-cloud-ruby-0.0.9 lib/prefab/config_client.rb